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.
In reply to Re: Wierd Behavior With Tie
by dragonchild
in thread Wierd Behavior With Tie
by rational_icthus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |