[comp.lang.perl] Recursively going into subdirectories problem

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