I get this input :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;
I don't understand why the weaken is inneffective to break the circular reference. If I remove the "tie", it works. But the problem is that I need to know when my variables are destroyed. So I need the "tie" call. Is it a perl bug ? I'm using perl 5.8.3@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)
In reply to Bug with weaken vs tie ??? by nothing94
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |