use strict;
use warnings;
use feature 'say';
use Devel::Peek;
use Storable qw/ freeze thaw /;
my $s = 'abc';
my $r = \substr $s, 1, 1;
say ref $r; # LVALUE
Dump $r; #
say ${ thaw freeze $r }; # failure
$$r = 'Z';
say ref $r; # LVALUE again
Dump $r; # ref target is now POK, PV is "Z"
say ${ thaw freeze $r }; # "Z"
####
use strict;
use warnings;
use feature 'say', 'state';
use Devel::Peek;
use Storable qw/ freeze thaw /;
sub foo : lvalue { state $r; $$r }
foo = 42;
say ref \foo; # SCALAR
Dump \foo; # Nothing interesting. Much
# shorter output than one
# full of magic, above.
say ${ thaw freeze \foo }; # 42
####
@result = mce_map { ...work with $_ } substr(...)
@result = mce_map { ...work with $$_ } \substr(...)
@result = mce_map { ...work with $$_ } \( my $s = substr(...))