However, the preprocess returns everything,
That is kinda what you tell it to do.
elsif (-d && /advanced/ ) {push (@toreturn, $_);}
means "hey, I've found one I want to ignore, but I choose to NOT ignore , aren't I funny?"
so I need to use the preprocess possibility
Not exactly :)
use File::Find::Rule
use File::Find::Rule;
my $rule = File::Find::Rule->new;
$rule->or(
## first rule, things to ignore, to skip
$rule->new
->directory
->name('CVS', qr/advanced/i )
->prune
->discard,
$rule->new
->file
->name('*.log')
);
my @files = $rule->in( @startdirs );
or use Path::Class::Rule , it doesn't use File::Find underneath, and actually names the prune/discard option skip, and provides a real iterator , its brilliant
use Path::Class::Rule;
my $rule = Path::Class::Rule->new;
$rule->skip(
$rule->new->dir->name(qr/advanced/i),
$rule->new->skip_vcs
);
$rule->file->name('*.log');
# iterator interface
my $next = $rule->iter( @dirs );
while ( my $file = $next->() ) {
...
}
|