in reply to Re: Re: Re: Uses for an lvalue subroutine
in thread Uses for an lvalue subroutine

chipmunk points out something that I had failed to test for. In my effort to reduce the code down to a minimum, that case slipped right through my logic. Here's Take II, new and improved support for 0 and "" added:

sub AUTOLOAD : lvalue
{
        my ($self) = shift;

        $AUTOLOAD =~ s/.*://;

        @_?
                $self->{$AUTOLOAD} = shift 
                : !defined($self->{$AUTOLOAD})?
                        $self->{$AUTOLOAD} = undef 
                        : $self->{$AUTOLOAD};
}

The reason for having $self->{$AUTOLOAD} = undef is to give the caller something to assign to. Returning an invalid hash entry will cause an assignment error. 'undef' is not a valid lvalue, but returning a reference to a variable which may have a value of 'undef' is acceptable.

BTW, I've never had to indent my '?:'s before, but it was the only way to make how this worked clear(er).