| Next | The Identity Function | 32 | 
        sub walk_tree {
          my ($dir, $filefunc, $dirfunc) = @_;
          if (-d $dir) {
            $dirfunc->($dir);
            opendir my $dh, $dir or return;
            while (my $file = readdir $dh) {
              next if $file eq '.' || $file eq '..';
              walk_tree("$dir/$file", $filefunc, $dirfunc);
            }
          } else {
            $filefunc->($dir);
          }
        }
Now we can print just the names of the directories:
        walk_tree($DIR, sub {}, sub { print $_[0] });
Or accumulate a list of plain files:
        my @FILES;
        walk_tree($DIR, sub {push @FILES, $_[0]}, sub {});
        
| Next |  | Copyright © 2001 M. J. Dominus |