eastick@me.utoronto.ca (Doug Eastick) (03/30/90)
I'm writing a program that goes down in a directory tree, reading
files while going down. Pseudo-perl below with commentary after.
---------
#!/usr/bin/perl
@directories = (
"barf",
"foo"
);
@dirstack = ();
$topdir = "/u3/eastick/blork/";
for $dir (@directories) {
print "doing $dir\n";
do dodir($dir);
# do stuff with the results
}
#
# Sum and count the hierarchy, calling recursively if neccessary
#
sub dodir {
local($dir) = @_;
local($file, $xyz, $burp, $snuff, $gorp);
local($curdir) = "";
local($d);
push(@dirstack, $dir);
for $d (@dirstack) {
$curdir .= "/" . $d;
}
print "dodir: $curdir\n";
chdir($topdir.$curdir) || warn "Couldn't cd to $curdir";
for $file (<*>) {
print "dodir: for'ing $file\n";
if (-d $file) { # THIS FAILS THE 2ND TIME
do dodir($file); # recursive
print "dodir: back from recursive dodir of $file\n";
next;
}
if (-z $file) {
next;
}
#
# do stuff here with the readable file
#
}
pop(@dirstack);
}
--------------
Say, inside $topdir is 3 directories: a, b and c. All 3 contain text
files.
Problem: stuff in `a' is processed properly, but once it returns from
the recursive dodir(), `a' is processed again (as $file) and even
fails the -d test. Why? Also, why is the second-last line
(pop(@dirstack)) executed before the body of the for loop is done?
...Stupid perl questions
--
Doug Eastick -- eastick@me.utoronto.ca