{ package foo; # not tied so all is well my %h = qw(one two three four); sub new { bless { val => \%h } } sub val : lvalue { $_[0]->{val}->{one} } } use Devel::Peek; my $obj = foo->new; $obj->val = "foo"; Dump( $obj->{val}->{one} ); __output__ SV = PV(0x80f9c40) at 0x80f9964 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x80f9018 "foo"\0 CUR = 3 LEN = 4