Closed p5pRT closed 21 years ago
---------- begin program ---------- #!/usr/bin/perl -I.
my $x = 7; tie $x\, 'Overlay'\, 8; print "tied x = $x.\n"; untie $x; print "untied x = $x.\n";
package Overlay;
sub TIESCALAR { my $pkg = shift; my $y = shift; return bless \$y\, $pkg; }
sub FETCH { my $self = shift; return "\<$$self>"; }
sub STORE { } ---------- end program ----------
In the above program\, the untie only partially works. After the untie\, tied($x) no longer returns anything however\, if I access $x\, the value I get is "\<8>" instead of the "7" it should have reverted to.
If I add UNTIE or DESTROY methods to Overlay\, they are called.
If I drop the 'print "tied x = $x.\n";' line then $x remains at "7".
On Fri\, May 23\, 2003 at 04:36:47AM -0000\, David Muir Sharnoff wrote:
---------- begin program ---------- #!/usr/bin/perl -I.
my $x = 7; tie $x\, 'Overlay'\, 8; print "tied x = $x.\n"; untie $x; print "untied x = $x.\n";
package Overlay;
sub TIESCALAR { my $pkg = shift; my $y = shift; return bless \$y\, $pkg; }
sub FETCH { my $self = shift; return "\<$$self>"; }
sub STORE { } ---------- end program ----------
In the above program\, the untie only partially works. After the untie\, tied($x) no longer returns anything however\, if I access $x\, the value I get is "\<8>" instead of the "7" it should have reverted to.
There is nothing in the documentation to say that it should be reverted to its old value.
If I add UNTIE or DESTROY methods to Overlay\, they are called.
If I drop the 'print "tied x = $x.\n";' line then $x remains at "7".
Thats because when FETCH is called perl needs somewhere to place the result before actually using it. In the case of a tied SCALAR it uses the scalar that is tied. So there is now way that the old value can be reverted to. After untie\, a scalar will always hold the last value that was fetched or set.
Graham.
* There is nothing in the documentation to say that it should * be reverted to its old value. * * > If I add UNTIE or DESTROY methods to Overlay\, they are called. * > * > If I drop the 'print "tied x = $x.\n";' line then $x remains at "7". * * Thats because when FETCH is called perl needs somewhere to place the * result before actually using it. In the case of a tied SCALAR it uses the * scalar that is tied. So there is now way that the old value can be * reverted to. After untie\, a scalar will always hold the last value * that was fetched or set. *
Okay\, I can live with that. Please close this bug out.
I think I've got a couple more related to TIESCALAR\, but I'll submit 'em separately when I've got good test cases.
Thank you for the prompt response!
-Dave
@rspier - Status changed from 'new' to 'resolved'
Migrated from rt.perl.org#22290 (status was 'resolved')
Searchable as RT22290$