あなた./emails
ディレクトリにこれらのファイルが含まれている場合:
1.msg
2.msg
3.msg
、あなたの@files
が('.', '..', '1.msg', '2.msg', '3.msg')
ようになりますが、あなたのrename
は'emails/1.msg'
、'emails/2.msg'
ような名前を望んでいる、などの名前を変更する前chdir
することができますので:
chdir('emails');
for (@files) {
#...
}
あなたはおそらくch戻り値もchdir
にしてください。
またはディレクトリ名を自分で追加します。
rename('emails/' . $old, 'emails/' . $_) or print "Error renaming $old: $!\n";
# or rename("emails/$old", "emails/$_") if you like string interpolation
# or you could use map if you like map
あなたはgrep
を使用して、ディレクトリの読み取りおよびフィルタリングを組み合わせることが必要になる場合があります
my @files = grep { /^RE .+msg$/ } readdir(DIR);
かさえ、この:
opendir(DIR, 'emails') or die "Cannot open directory";
for (grep { /^RE .+msg$/ } readdir(DIR)) {
(my $new = $_) =~ s/^RE //;
rename("emails/$_", "emails/$new") or print "Error renaming $_ to $new: $!\n";
}
closedir(DIR);
エラー(!$)を印刷する場合は、あなたが間違っているかのアイデアを得るかもしれない... – pilcrow
はそれを指摘いただきありがとうございます。エラーは 'No such file or directory'です。 $ oldのファイル名が正確であるので、私は驚いています。 – Johnathan1
'rename'はクロスプラットフォームサポートを楽しんでいないことに注意してください。' File :: Copy'の 'move'関数は – Zaid