in reply to My first thought was to build a macro... was I right?

A thought:
sub rmtree { trashIt(@_, "rmtree"); } sub unlink { trashIt(@_, "unlink"); } sub trashIt { my ($o, $file, $cmd) = @_; eval { $cmd $file } ; if ($@) { $o->LOG('error', "$file: $@"); } }
And I am sure you could do something with closures....