With this SIMPLE code :
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 get this input :
@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)
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
Thanks,
nothing94

In reply to Bug with weaken vs tie ??? by nothing94

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.