According the the documentation for File::Find:
The wanted function takes no arguments but rather does its work through a collection of variables.
$File::Find::dir is the current directory name,
$_ is the current filename within that directory
$File::Find::name is the complete pathname to the file.
The above variables have all been localized and may be changed without affecting data outside of the wanted function.
So this line:
return unless $File::Find::dir =~ /[IPD]\d{8}$/;
is actually testing the parent directory, not the current file. Better to run both tests against the current filename in $_:
sub dir_names { return unless -d $_; return unless $_ =~ /[IPD]\d{8}$/; $dirs{$File::Find::name} = 1; }
or just:
sub dir_names { return unless -d; return unless /[IPD]\d{8}$/; $dirs{$File::Find::name} = 1; }
I think that fixes the problem.
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re^3: File::Find pattern match question
by Athanasius
in thread File:Find pattern match question
by RockE
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |