package Foo;
sub top {
my($fn) = @_;
our($d) = ["a", "b"];
printf "Top before %s [%s]\n", $d, join(",", @$d);
$fn->($d);
printf "Top After %s [%s]\n", $d, join(",", @$d);
}
package Bar;
Foo::top(sub {
our($d) = @_;
printf " Before %s [%s]\n", $d, join(",", @$d);
$d = [];
printf " After %s [%s]\n", $d, join(",", @$d);
});
####
C:\Scripts>perl scope.pl
Top before ARRAY(0x183f218) [a,b]
Before ARRAY(0x183f218) [a,b]
After ARRAY(0x183f248) []
Top After ARRAY(0x183f218) [a,b]
####
C:\Scripts>perl -v
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2001, Larry Wall
Binary build 635 provided by ActiveState Corp. http://www.ActiveState.com
Built 15:34:21 Feb 4 2003