Renaming Files
Giving an existing file a new name is simple with the rename
function:
rename "old", "new";
This is similar to the Unix mv command, taking a file named old and giving it the name new in the same directory. You can even move things around:
rename "over_there/some/place/some_file", "some_file";
This moves a file called some_file from another directory into the
current directory, provided the user running the program has the
appropriate permissions.[‡] Like most functions that request something of the
operating system, rename returns
false if it fails, and sets $! with
the operating system error, so you can (and often should) use or die (or or
warn) to report this to the user.
One frequent[‖] question in the Unix shell-usage newsgroups concerns how to rename everything that ends with .old to the same name with .new. Here’s how to do it in Perl nicely:
foreach my $file (glob "*.old") {
my $newfile = $file;
$newfile =~ s/\.old$/.new/;
if (-e $newfile) {
warn "can't rename $file to $newfile: $newfile exists\n";
} elsif (rename $file, $newfile) {
## success, do nothing
} else {
warn "rename $file to $newfile failed: $!\n";
}
}The check for the existence of $newfile is needed because rename will happily rename a file right over
the top of an existing file, presuming the user has permission to remove
the destination filename. We put the check in so that it’s less likely
that we’ll lose information this way. Of course, if you
wanted to replace existing files like wilma.new, you wouldn’t ...