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

    Works perfectly! :-) Thank you very much! Cheers