And a workaround:
for(0..100){ my $x = $tied; print $x->(5), "\n"; }

As far as I can tell, the issue is the fact that the thing has already been FETCH'ed into an anonymous variable within either that scope or an enclosing scope. You can trip the bug even easier by doing the following:

print $tied->(5), $/; { print $tied->(10), $/; }

But, if you assign it to something, then the fetch is going to a different place, as seen by the workaround.

And, it seems to be a check for the constancy of the thing. The following also "fixes" the bug:

print $tied->(5), $/; $r->{subref} = sub { return 2 * $_[0] }; # This is a new anonymous sub +ref { print $tied->(10), $/; }

Or, more transparently to the calling code:

sub FETCH { my $r = shift; print "Checking for pause ..."; return $r->{subref} = $r->{subref}; }

It's definitely a bug and it looks to be a misplaced optimization.


My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

In reply to Re: Wierd Behavior With Tie by dragonchild
in thread Wierd Behavior With Tie by rational_icthus

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.