$ perl -le 'print ref \substr "foo", 1' LVALUE #### $ perl -le 'my $u; sub u :lvalue {$u} print ref \u' SCALAR #### #!/usr/bin/perl -l use strict; use warnings; package Append; sub TIESCALAR { bless \$_[1], $_[0] } sub FETCH { ${${ $_[0] }} } sub STORE { ${${ $_[0] }} .= $_[1] } package main; sub append :lvalue { tie my $v, 'Append', \$_[0]; $v; } my $u='Foo'; (append $u)='Bar'; print $u; __END__ #### (append $u)='Bar'; print $u; #### print +(append 'Foo')='Bar'; #### sub append :lvalue { local *LVALUE::STORE = sub { my $self=shift; $$self .= $_[0]; } $_[0]; }