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); $Foo::d = []; printf " After %s [%s]\n", $d, join(",", @$d); }); --(0)> perl test.pl Top before ARRAY(0x8144234) [a,b] Before ARRAY(0x8144234) [a,b] After ARRAY(0x8144234) [a,b] Top After ARRAY(0x81442dc) []