File::Find
use File::Find;
# Print out all directories below current one.
find sub { print "$File::Find::name\n" if -d }, ".";
# Compute total space used by all files in listed directories.
@dirs = @ARGV ? @ARGV : ('.');
my $sum = 0;
find sub { $sum += -s }, @dirs;
print "@dirs contained $sum bytes\n";
# Alter default behavior to go through symlinks
# and visit subdirectories first.
find { wanted => \&myfunc, follow => 1, bydepth => 1 }, ".";The File::Find module's
find function recursively descends directories. Its
first argument should be a reference to a function, and all following
arguments should be directories. The function is called on each
filename from the listed directories. Within that function, the
$_ variable is set to the basename of the current
filename visited, and the process's current working directory is by
default set to that directory. The package variable
$File::Find::name is the full pathname of the
visited filename. An alternative calling convention takes as its first
argument a reference to a hash containing option specifications,
including "wanted", "bydepth",
"follow", "follow_fast",
"follow_skip", "no_chdir",
"untaint", "untaint_pattern",
and "untaint_skip", as fully explained in the
online documentation. This module is also used by the standard
find2perl (1) translator program that
comes with Perl.