On Wednesday, June 5, 2002, at 03:12 , James Kelty wrote:

> Hello.
>
> I am using the File::Find module from Cpan to travers some filesystems to,
> well, find a file.
> Here is my small snippet of code. Basically what is happening is that the
> sub is returning a 0 instead of the file name. What am I doing wrong?

as Michael Fowler <[EMAIL PROTECTED]> wisely noted.

> If you want a list of the found files your wanted subroutine is going to
> have to append them to some array.  If you want to act on a given 
> filename,
> put the code that does the action in the wanted subroutine.
>
>
>        my $newConf = File::Find::find({wanted => \&wanted}, '/');
> [snip]
> sub wanted {
>     /^base\\.conf\z/s &&
>     return("$name");
> }


one really big version of the code we have used is:
http://www.wetware.com/drieux/pbl/misc/findModules.txt


you might use something like:

        sub wanted {
                if ( -d && ! -x ) { $File::Find::prune = 1 ; return }

                return unless /$confName$/ ;
                my $fullPath = "$File::Find::dir/$_";
                push(@baseList, $fullPath); # stash for post processing after find


        } # end of wanted

and try not to run from "/" - way lots of stuff you do not
want to have to look through like /dev and /proc....

hence maybe something shorter like

my @baseList;

        my $confName = "base.conf";
        my @dirList = qw!/tmp /Users !; # /var /usr!;

        foreach my $dir (@dirList) {
                print "so we start by checking :$dir:\n";
                #find({ wanted => \&wanted, follow => 1, no_chdir => 1 },$dir);
                find({ wanted => \&wanted, follow => 1 },$dir);
        }       

        foreach my $bs (@baseList) {
                print "well we found this $bs\n";
        }

as some play around until you have the look and feel ok enough...

{ I had to put 'follow' since "/tmp" is actually a symbolic link....

ciao
drieux

---


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to