nothing94 has asked for the wisdom of the Perl Monks concerning the following question:
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)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Bug with weaken vs tie ???
by gaal (Parson) on Feb 28, 2005 at 16:55 UTC | |
|
Re: Bug with weaken vs tie ???
by dave_the_m (Monsignor) on Feb 28, 2005 at 19:56 UTC | |
by nothing94 (Initiate) on Feb 28, 2005 at 20:17 UTC |