in reply to Hash::AsObj
With the above code you get this error:#!/usr/bin/perl package Foo; sub new { bless {}, shift } sub DESTROY {1} sub AUTOLOAD : lvalue { my ( $method ) = $AUTOLOAD =~ /^.*::(.+)$/ or die "Invalid call to $AUTOLOAD"; *$AUTOLOAD = sub : lvalue { my $self = shift; if (@_) { $self->{$method} = shift; return $self; } $self->{$method}; }; goto &$AUTOLOAD; # Uncomment the following 'useless' line # and it works: # $Foo::baz; } package main; my $foo = Foo->new; $foo->bar = 4; print $foo->bar,"\n";
If you uncomment the last line of the AUTOLOAD, you seem to fool the compiler into thinking that AUTOLOAD is going to return a valid lvalue, even though it never actually returns that value, since you goto somewhere else first.Can't modify goto in lvalue subroutine return at ...
|
---|