Found this somewhere else, and it works wonderfully for me, so I thought I'd pass it on (yes, it's recursive, but it's also easier to read/write/maintain than the iterative sol'n above):
sub recurse
{
my($path) = @_;
print( "working in: $path\n" );
# append a trailing / if it's not there
$path .= '/' if($path !~ /\/$/);
# loop through the files contained in the directory
for my $eachFile (glob($path . '*')) {
# if the file is a directory
if( -d $eachFile)
{
# pass the directory to the routine ( recursion )
recurse($eachFile);
}
else
{
handleFile( $eachFile );
}
}
}
Go paco!