in reply to filenames

Just to add to what the others have said about checking for errors: always Use strict and warnings. You may also be interested in autodie as an alternative to checking every call for errors.

Personally, when batch renaming files, I tend to use Larry's rename script from File::Rename. For recursive operations I would combine that with find.