# this is a test example my $name = 'doc.txt'; for ( 1 .. 10 ) { my $unique = get_unique_filename($name); $names{$unique}++; print "$unique\n"; } sub get_unique_filename { my $name = shift; $name =~ s/(\.[^\.]+)$//; my $ext = $1 ? $1 : ''; my $tries = ''; my $max_tries = 100; while ( not unique_name($name.$tries.$ext) ) { $tries++; die "Could not make a unique file name $name\n" if $tries > $max_tries; } return $name.$tries.$ext; } # this tests if our name exists in the test hash # you need to test if the file exists here instead sub unique_name { my $name = shift; return defined $names{$name} ? 0 : 1; # return -e $name ? 0 : 1; }