http://qs321.pair.com?node_id=31528

damian has asked for the wisdom of the Perl Monks concerning the following question:

hi guys, i have this problem with directory walking i have a code here that search all directory that has htm and html files on it. the problem is that when i run the program it takes so long for the program to do the searching because some of my directories have about a hundred of html files. my idea is to specify in the program what directories should be skipped, but dunno how to do it here.. dumb huh! well anyway here is the code and give suggestions.
sub dirwalk { local @d_info=(); local $n = ""; local $r = ""; opendir H_DIR,$_[0]; @dir_info=readdir H_DIR; closedir H_DIR; foreach $n (@d_info) { next if $n=~/^\.*$/; if (-d "$_[0]/$n"); } else { next if !($n=~/^.+\.(htm|html)$/); ($r,$line) &search_tags("$_[0]/$n"); if ($r) { push @pages, "$_[0]/$n" if $r; } } } }
and oh btw, the &seach_tags is the subroutine that accepts input from user to search HTML files for a certain pattern. thanks in advance.

Replies are listed 'Best First'.
Re: Directory Walk
by merlyn (Sage) on Sep 08, 2000 at 07:06 UTC
    use File::Find; find sub { return $File::Find::prune = 1 if $File::Find::name =~ m{^/top/dir/this|some/where|.DONTSEARCH}; return unless /\.html?$/; ($r, $line) = search_tags($File::Find::name); push @pages, $File::Find::name if $r; }, "/top/dir";
    Details, of course, are in File::Find

    -- Randal L. Schwartz, Perl hacker

Re: Directory Walk
by eak (Monk) on Sep 08, 2000 at 07:04 UTC
    Try using good 'ol File::Find for this. --eric
RE: Directory Walk
by OzzyOsbourne (Chaplain) on Sep 08, 2000 at 17:42 UTC

    I tried to build what you are trying to build, and I didn't do very well. I was told to use File::Find

    I now use file::find in a incessantly to patrol servers in a variety of scripts. If you need an Example, I posted a couple of them. It is really easy to use, and it saved me from wasting time reinventing the wheel.

    But, there are a million ways to do things...

    good luck...

    -OzzyOsbourne
A reply falls below the community's threshold of quality. You may see it by logging in.