The reason for the problem is that the filetests are going
against the file names directly. So if you are listing
files in directory /foo while you are in /bar, you are
looking at whether /bar/baz is an old file when what you
really wanted to know is whether /foo/baz is an
old file.
You have posted one workaround. The other is:
my $logdir = "/whatdir/";
opendir(LOGDIR, $logdir) or die "Can't open '$logdir': $!\n";
foreach my $file (
grep {-f && (-M > 5)} map "$logdir$_", readdir(LOGDIR)
) {
unlink $file;
}
closedir(LOGDIR);