Its interesting that you post this, because I have written (and submitted) a (possibly superfluous) mechanism for recursive actions on a directory tree, based around your File::chdir. That module is one of the most clever uses of tie and indeed shows the "fun" one can have with Perl. Since I found myself using it and a consistent idiom I packaged it into File::chdir::WalkDir. It benefit is that the sub that gets called per file is always executed with the working directory set to the one that contains the file.
I had been meaning to mention this little module to you at some point and this seemed like the time. Feel free to ignore, or comment if you have ideas.