in reply to Directory traversal problem

Without looking too deeply into it, it looks like the problem is in dir, where you have
foreach my $file ( lsdir("/") ) {
So in each directory, it's going ove the contents of the root again. It looks to me like you meant
foreach my $file ( lsdir($path) ) {
Also, stylistically, you've got some very strange things. You seem to be using 0 for true, and 1 for false, and then doing a lot of if (0 == $debug) instead of doing a more conventional style of using 1 for true and either 0 or undef for false. That way, your tests could just be if ($debug) (same for isdir, and possibly others). And you're calling isdir several times, instead of (actually, in addition to) just storing the value returned the first time. It'd be much more natural to do
if (isdir("$path/$file"){ ... } else { ... }