As far as I know, when using
lvalue subs you are not supposed to explicitly
return anything. You just have to gently place the variable you want at the appropriate position and pray to the Perl gods to take it away. If you return it, the whole contract breaks down. Even an
if can ruin it, as your variable is stuck in the wrong spot.
sub assign_to_hash : lvalue
{
exists($hash{$_[0]})? $hash{$_[0]} : undef;
}
That should certainly do the trick. If you don't care about assigning to new places, you can simplify:
sub assign_to_hash : lvalue
{
exists($hash{$_[0]})? $hash{$_[0]} : $hash{$_[0]} = undef;
}
It's peculiar, but effective. Just be careful.