$ 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];
}