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.
Get Programming Perl, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.