I find myself using File::Find more and more now that I've
got the hang of it. Typically you set up like so:
find( \&do_stuff, $from_dir );
is the place where all the real
work gets done.
A couple caveats that I've found (the hard way...) about
what you can do inside do_work():
Don't change $_ inside do_work().
If you want to, save a copy on entry and change it back
As Corion mentions, the working directory is changed to
each recursed directory under your starting point. If you
change directories inside do_work(), save a
copy of the current directory on entry and
chdir back to it before returning.
The usual file test operator caveats apply, for example
-f $File::Find::name and
-l $File::Find::name are both true if the file
is a symlink to another file. If you're interested in
symbolic links, test for those first, before you test for
file- or directory-ness.