in reply to it's been awhile . . .

When you're writing something that could do some lasting damage, it's always best to test it first. I've learned to be a bit paranoid, especially when running my own code, so more often then not I end up doing something like:
my $still_testing = 1; my $talkative = 1; foreach my $to_delete (@liberation_pool) { print "Deleting $to_delete\n" if $talkative; unlink ($to_delete) unless $still_testing; }
Look over the output and make sure things add up. As in, it's not deleting your entire MP3 directory, formatting your filesystem, or stealing food from your fridge. A tiny slip of logic and you could be facing a re-install. Laziness is a virtue, except when you're too lazy to test it properly and it bites you.

Another thing is to not actually delete them, but to move them to some sort of 'orphan' folder (fixing name collisions, of course) which can be discarded at your leasure, much like the trash can/recycle bin. Use rename instead of unlink, for example. rename is dangerous too, since you can rename every single file in a directory to a single file, which 'mv' prevents you from doing in most cases.

There are probably better test techniques than the simple 'printf debugging' described here. Just make sure you can turn on the safety when testing something that could be very dangerous.