find( sub { if (-d $_) { if (/^questionable/) { dir_func_1($File::Find::name); } elsif (/-(\d{6}-\d{6})$/) { dir_func_2($_,$1); } # Uncomment following line to prevent furthur recursion. # $File::Find::prune = 1; } else { # you may want furthur tests before assuming good file file_func($_); } }, $intdir);