require Tie::Hash; use vars qw( %h %t ); %h = ( a=>1 ); tie %t, 'Tie::StdHash'; %t = ( z=>9 ); eval { sub { values %h }->() += 10; }; warn "$@\n"; eval { sub { values %t }->() += 10; }; warn "$@\n"; print ref(\substr("hello",1,2)), $/; print ref(\sub { values %h }->()), $/; print $/; use vars qw( $a, $b, $c, $x, $y, $z ); print $a=\values %h, $/; print $b=\values %h, $/; print $c=\sub{values %h}->(), $/; print $/; print $x=\values %t, $/; print $y=\values %t, $/; print $z=\sub{values %t}->(), $/; print $/; $,= " "; $$x= 31; print $$x, $$y, values %t, $/; $$y= 32; print $$x, $$y, values %t, $/; $$x= 33; print $$x, $$y, values %t, $/; __END__ Can't modify non-lvalue subroutine call at values2.pl line 6. Can't modify non-lvalue subroutine call at values2.pl line 8. LVALUE SCALAR SCALAR(0x1a7f228) SCALAR(0x1a7f228) SCALAR(0x1aced54) SCALAR(0x1aced60) SCALAR(0x1aced78) SCALAR(0x1aced9c) 31 31 31 31 32 32 33 32 33