{ package foo; use Tie::IxHash; tie(my %h, 'Tie::IxHash', qw(one two three four)); sub new { bless { val => \%h } } sub val : lvalue { $_[0]->{val}->{one} } } use Devel::Peek; my $obj = foo->new; Dump( $obj->{val}->{one} ); # dies here $obj->val = "foo"; __output__ SV = PVMG(0x8131170) at 0x8154b68 REFCNT = 1 FLAGS = (TEMP,GMG,SMG,RMG) IV = 0 NV = 0 PV = 0 ... many more lines of output Can't return a temporary from lvalue subroutine at - line 9