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->() ) { ... }