in reply to Fuser under perl
There is a bug in your code.
stdin, stdout, and stderr are fd's 0, 1, and 2.
Thus, the line:
if ((reverse(File::Spec->splitpath($f)))[0] > 3 && -l $f) {
should be:
if ((reverse(File::Spec->splitpath($f)))[0] >= 3 && -l $f) {