# recursively operate on files use DirHandle; sub go_in { my $dir = shift; # -- this just flips the toothpicks, in case # we're in windows. It's not really necessary. $dir =~ tr/\\/\//; # -- and this just adds a trailing slash, for # concatenating later. if ($dir !~ m/\/$/){ $dir .= '/'; } my $dh = new DirHandle ($dir); # or die, I suppose. return unless $dh; while ( defined( my $item = $dh->read )) { next if $item =~ m/\.$/; $item = $dir.$item; # paranoid about symlinks. next if -l $item; # -- call recursively, but not forever: # (discard visited directories) if ( -d $item ){ go_in($item); next; } # -- operate on files here -- # } }