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


in reply to Help using Find::File::name

It's almost certainly a scoping problem, as others have said.

Additionally, I'm not sure what you're trying to do in this Wanted. Even if you had proper scoping, you'd still be re-assigning the variable each time you went over it - in the end, you'd just have whatever the last value that matched the test.

Here's a try at something more reasonable:

my @foundfiles; sub Wanted { return unless (-f $_); # only operate on compiled widgets /\.wgt$/ or return; my $file = $_; chomp ($file); chomp ($line); #print $file ." \n" if $file eq $line; if (lc($line) eq lc($file)){ # Adds the files to the array push @foundFiles, $File::Find::name; } return; }

Alternately, you could keep foundfile as a scalar, and append to it thusly:

$foundfile .= "$File::Find::name\n";

Either way, the important thing is that your variable needs to be in a scope where it won't go away before you use it.

These are pretty common errors, and Perl can catch a lot of them. If you aren't already, start putting this code at the top of every Perl program you write:

use strict; use warnings;

This will catch a LOT of problems before they turn into headaches. For even more detail (at some performance cost, you can use diagnostics;

for(split(" ","tsuJ rehtonA lreP rekcaH")){print reverse . " "}print "\b.\n";