use File::Basename; use File::Spec::Functions; # ... while (my $file = readdir DIR) { # ... # $newfile contains the full path to the new file my $extra = "a"; while (-e $newfile) { my ($path,$basename,$suffix) = fileparse($newfile,'.rtf'); $basename .= $extra; $extra++; $newfile = catfile($path,$basename,$suffix); } copy($oldfile,$newfile) or die; }