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.[282] 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[283] question in the Unix shell-usage newsgroups is how to rename everything that ends with .old to the same name with .new. Here’s how to do it in Perl:
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 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. If you wanted to replace existing files, like wilma.new, you wouldn’t bother testing with ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access