File::Find chdir's to the subdirectory, and you are opening './subdir/file' from the subdirectory. You just need to open '$_', the current filename, since you are in the subdirectory.
And so, BTW, you might want to change this line:
return if $fileName !~ /[\w]+\.(?:cgi|p[lm])$/;
To this:
return unless /^\w+\.(?:cgi|p[lm])$/;