in reply to Re^2: File:Find pattern match question
in thread File:Find pattern match question
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, |
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: File:Find pattern match question
by RockE (Novice) on Nov 02, 2013 at 12:06 UTC |