Nice code. I saw something in your code that I was doing, and lately converted. These lines:
#use default directory if argument not set on command line
find(\&fileop, $opts{'directory'}) unless @ARGV;
find(\&fileop, @ARGV) if @ARGV;
Your use of
if and
unless are creating a more compact form of
if (...){} else {} for calling
&find. I love statement modifiers, but I now use the following form:
#use default directory if argument not set on command line
find(\&fileop, @ARGV ? @ARGV
: $opts{'directory'});
That way, with a true
if/else variant, I never screw up the logic and inadvertently create
overlapping conditions, which were difficult to debug.
Yes, Aristotle said the same thing, but the key, I think, is not the needless redundancy of the code, but the danger of creating those overlapping conditions.