Although this may not save you much here, you may want to look at
Getopt::Std for grabbing command line options (maybe even
Getopt::Long).
Also, if you are distributing a replacement for a unix system tool, you might want to be more verbose about what this does that it doesn't. Because when I hear "recursive chmod" I think
chmod 755 cgi-bin --recursive.
Added: of course, by looking at it, I see that it does a great job of taking different file types and chmod'ing them appropriately. Cool.