use Scalar::Util qw(weaken isweak); { my (@a, @b); tie @a, 'Monitor::TestArray'; tie @b, 'Monitor::TestArray'; $a[0] = \@b; $b[0] = \@a; weaken($b[0]); if (isweak($a[0])) { print "\@a is weak\n"; } else { print "\@a is not weak\n"; } if (isweak($b[0])) { print "\@a is weak\n"; } else { print "\@a is not weak\n"; } print STDERR "Leaving scope\n"; } print STDERR "Scope left\n"; package Monitor::TestArray; use Tie::Array; use base 'Tie::StdArray'; sub DESTROY { print STDERR "Monitor::TestArray::DESTROY : $_[0]\n"; } 1; #### @a is not weak @a is not weak Leaving scope Scope left Monitor::TestArray::DESTROY : Monitor::TestArray=ARRAY(0x813f2e8) Monitor::TestArray::DESTROY : Monitor::TestArray=ARRAY(0x813f378)