in reply to Confused scoping while using File::Find

The following code clearly shows what is going on. When you call foo for the first time, @a was shared by bar. Second time when you enter foo, bar does not share the new @a, instead it retains the old one.

use strict; use warnings; use Data::Dumper; foo(1); bar(); foo(2); bar(); sub foo { my @a; push @a, shift; print \@a; print Dumper(\@a); sub bar { print \@a; print Dumper(\@a); } }

Here is the output:

Variable "@a" will not stay shared at c.pl line 17.
ARRAY(0x1890e78)$VAR1 = [ 1 ]; ARRAY(0x1890e78)$VAR1 = [ 1 ]; ARRAY(0x18c2194)$VAR1 = [ 2 ]; ARRAY(0x1890e78)$VAR1 = [ 1 ];

Make @a_files a property of the class, and define those two methods at the same level. This shall resolve your problem, and the code is much clearer.

Replies are listed 'Best First'.
Re^2: Confused scoping while using File::Find
by rongoral (Beadle) on Oct 11, 2004 at 15:31 UTC
    This makes sense. Thank you for taking the time to examine my issue. Thank you also for the test code sample. I can see that I have much to learn regarding debugging my own problems.