in reply to Wierd Behavior With Tie
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Wierd Behavior With Tie
by rational_icthus (Sexton) on Jun 02, 2006 at 17:36 UTC |