use File::Find::Rule; my $dir_rule = rule( directory => not_name => qr/^_/, start => @ARGV, ## or whatever ); while(my $dir = $dir_rule->match) { ... }