Si el directorio de ./emails
contiene estos archivos:
1.msg
2.msg
3.msg
entonces su @files
quedará del siguiente modo ('.', '..', '1.msg', '2.msg', '3.msg')
pero su rename
quiere nombres como 'emails/1.msg'
, 'emails/2.msg'
, etc. Por lo que puede cambiar el nombre de chdir
antes:
chdir('emails');
for (@files) {
#...
}
Es probable que desee ch compruebe el valor de retorno chdir
también.
o añadir los nombres de directorio usted mismo:
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
Es posible que desee combinar su lectura directorio y filtrado usando grep
:
my @files = grep { /^RE .+msg$/ } readdir(DIR);
o incluso esto:
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);
Si imprime el error ($!) Usted puede tener una idea de lo que está mal ... – pilcrow
Gracias por señalarlo. El error es 'No tal archivo o directorio'. Estoy sorprendido porque el nombre del archivo $ old es exacto. – Johnathan1
Tenga en cuenta que 'rename' no cuenta con soporte multiplataforma, mientras que la función' move' de 'File :: Copy' hace – Zaid