diff options
-rw-r--r-- | lib/File/BackupCopy.pm | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/lib/File/BackupCopy.pm b/lib/File/BackupCopy.pm index 226e8ce..43ce150 100644 --- a/lib/File/BackupCopy.pm +++ b/lib/File/BackupCopy.pm @@ -89,7 +89,7 @@ sub backup_copy_simple { croak "unrecognized keyword arguments" if keys %_; my $backup_name = $file_name . '~'; if ($dir) { - $backup_name = File::Spec->catfile($dir, $backup_name); + $backup_name = File::Spec->catfile($dir, basename($backup_name)); } copy($file_name, $backup_name) or return _backup_copy_error($error, @@ -122,8 +122,9 @@ sub backup_copy_internal { or return _backup_copy_error($error, "failed to make a temporary copy of $file_name: $!"); - my $pat = $dir ? File::Spec->catfile($dir, "$file_name.~*~") - : "$file_name.~*~"; + my $backup_stub = $dir ? File::Spec->catfile($dir, basename($file_name)) + : $file_name; + my $pat = "$backup_stub.~*~"; my $num = (sort { $b <=> $a } map { if (/.+\.~(\d+)~$/) { @@ -141,10 +142,7 @@ sub backup_copy_internal { my $backup_name; while (1) { - $backup_name = "$file_name.~$num~"; - if ($dir) { - $backup_name = File::Spec->catfile($dir, $backup_name); - } + $backup_name = "$backup_stub.~$num~"; last if symlink($fh->filename, $backup_name); unless ($!{EEXIST}) { return _backup_copy_error("can't link " |