Why not some simplifications like
File::Find instead of a shell script with find and using internals such as symlink instead of system calls to ln? If you're feeling ambitious you could even use File::Find with built-in chmod to replace chmod -R. There's also File::Copy, etc. etc.
--
I'm not belgian but I play one on TV.