6.3 Callbacks
A subroutine reference is often
used for a callback. A callback defines what to
do when a subroutine reaches a particular place in an algorithm.
For example, the
File::Find module exports a
find subroutine that can efficiently walk through
a given filesystem hierarchy in a fairly portable way. In its
simplest form, you give the find subroutine two
parameters: a starting directory and "what to
do" for each file or directory name found
recursively below that starting directory. The "what
to do" is specified as a subroutine reference:
use File::Find;
sub what_to_do {
print "$File::Find::name found\n";
}
my @starting_directories = qw(.);
find(\&what_to_do, @starting_directories);
In this case,
find starts at the current directory
(.) and locates each file or directory. For each
item, a call is made to the subroutine what_to_do(
), passing it a few documented values through global
variables. In particular, the value of
$File::Find::name is the item's
full pathname (beginning with the starting directory).
In this case,
you're passing both data (the list of starting
directories) and behavior as parameters to the
find routine.
It's a bit
silly to invent a subroutine name just to use the name only once, so
you can write the previous code using an anonymous subroutine, such
as:
use File::Find;
my @starting_directories = qw(.);
find(
sub {
print "$File::Find::name found\n";
},
@starting_directories,
);
|