Files
devops/perl/Examples/Chap7/dir-walk-curried
2025-09-17 16:08:16 +08:00

36 lines
648 B
Plaintext

###
### dir_walk_curried
###
## Chapter 7 section 2.4
sub dir_walk {
unshift @_, undef if @_ < 3;
my ($top, $filefunc, $dirfunc) = @_;
my $r;
$r = sub {
my $DIR;
my $top = shift;
if (-d $top) {
my $file;
unless (opendir $DIR, $top) {
warn "Couldn't open directory $code: $!; skipping.\n";
return;
}
my @results;
while ($file = readdir $DIR) {
next if $file eq '.' || $file eq '..';
push @results, $r->("$top/$file");
}
return $dirfunc->($top, @results);
} else {
return $filefunc->($top);
}
};
defined($top) ? $r->($top) : $r;
}