Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Recursion

by DBX (Pilgrim)
on Aug 03, 2001 at 02:09 UTC ( [id://101805]=note: print w/replies, xml ) Need Help??


in reply to Recursion

Put your foreach loop into a sub (say it's called search_dir, then change your code to this:

chdir("/")||die "Error:$!\n"; opendir(ROOT_DIR,"/")|| die "Error:$!\n"; search_dir("/","/"); sub search_dir{ my ($dir,$fullpath) = @_; foreach $dir_cont (sort readdir($dir)){ next if $dir_cont =~s/^\.\.?$/; if (-f $dir_cont){ log_sbit($full_path . $dir_cont) if (-u $dir_cont || -g $dir_cont) +; } elsif (-d $dir_cont && opendir(SUB_DIR,"$dir_cont"){ my $new_full_path = $full_path . $dir_cont; search_dir($dir_cont,$new_full_path); } }

This code is untested. I just added the $full_path so you could keep track of the full path and I put it all into a sub. So far you have the right idea. You just need to put your logic in a routine you can call over and over again. Once you get it right, check out File::Find.

Replies are listed 'Best First'.
Re: Recursion
by s0ttle (Scribe) on Aug 03, 2001 at 16:35 UTC
    next if $dir_cont =~s/^\.\.?$/;
    you might want to change that line to:
    next if $dir_cont=~/^\.\.?$/;
    because I really don't think you want substitution. basically delete the 's' also
    my($dir,$fullpath) = @_;
    should be
    my($dir,$full_path) = @_;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://101805]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (2)
As of 2024-04-19 00:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found