Article 7673 of comp.lang.perl:
Xref: feenix.metronet.com comp.lang.perl:7673
Path: feenix.metronet.com!news.utdallas.edu!hermes.chpc.utexas.edu!cs.utexas.edu!math.ohio-state.edu!howland.reston.ans.net!agate!ames!koriel!sh.wide!wnoc-tyo-news!scslwide!wsgw!headgw!cvgw3!tshiono
From: [email protected] (Toru SHIONO)
Newsgroups: comp.lang.perl
Subject: Re: Tree traversal - call for algorithms
Message-ID: <[email protected]>
Date: 6 Nov 93 08:18:27 GMT
References: <[email protected]> <[email protected]> <[email protected]> <[email protected]> <[email protected]>
Sender: [email protected] (Usenet News System)
Organization: Sony Corporation, Tokyo, Japan
Lines: 43
Nntp-Posting-Host: aquarius
X-Newsreader: prn Ver 1.07
In-reply-to: [email protected]'s message of 4 Nov 93 14:37:55 GMT

In article <[email protected]> [email protected] writes:

: I have a 3 level directory tree with an arbitrary number of files
: in each leaf directory.
: My task is to traverse the tree and examine each file.
:
: I've struggled with readdir and a couple of "for each" loops
: inside each other, but have run into unforeseen trouble.
:
: I assume, however, that this classical task is more elegantly
: solvable by a recursive allgorithm or some perl primitive.
:
: Any suggestions out there ??

There is a good example named `dodir' in the Camel, page 56.
Or here is a small script which might be easy to start with:

#!/usr/local/bin/perl

&traverse('.');

sub traverse {
   local($dir) = shift;
   local($path);
   unless (opendir(DIR, $dir)) {
       warn "Can't open $dir\n";
       closedir(DIR);
       return;
   }
   foreach (readdir(DIR)) {
       next if $_ eq '.' || $_ eq '..';
       $path = "$dir/$_";
       if (-d $path) {         # a directory
           &traverse($path);
       } elsif (-f _) {        # a plain file
           print "$path\n";
           # or do something you want to
       }
   }
   closedir(DIR);
}
--
Toru "devil-may-care" Shiono          Sony Corporation, JAPAN