use strict; use Cwd; my $cwd = Cwd::getcwd(); my $directory = shift(@ARGV) || $cwd; $directory = $cwd . '/' . $directory unless $directory =~ /^\//; my @queue = ($directory); while (@queue) { my $node = shift(@queue); if (-d $node) { opendir(DIR, $node); push(@queue, map { $node . '/' . $_ } grep { $_ ne '.' and $_ ne '..' and $_ !~ /^_/ } readdir(DIR)); closedir(DIR); } else { do_your_stuff($node); } }