use File::Find::Rule qw/ find rule /; my $gonerDirs = rule( directory => name => [ 'baby', 'dead' ], qw/ prune discard/, ); ## use File::Find::Rule::Permissions (); ## ??? not for win32 ## my $keeperFiles = rule( file => permissions => [ '???' ],... ); my $keeperFiles = rule( file => exec => \&worldWriteable ... ); my @files = find( not => $gonerDirs , any => $keeperFiles , in => \@startdirs, ); #### my @files = rule()->or( ## !IMPORTANT NOTE discard before prune with rule()/find() rule( name => [ 'baby','dead' ], qw/ directory discard prune /), rule( file => exec => \&worldWriteable,... ) )->in( @startdirs ); #### sub worldWritable { my( $shortname, $path, $fullname ) = @_; ## $shortname == $_; ... return 1 if $want; return 0 if not $want; }