No can do. I don't know why.
Update: Actually, it's quite basic. The assignment of do's return value causes it to be copied. You'll notice the same effect from subroutines.
use Devel::Peek qw( Dump );
{
my $x = do {
my $y = 'abcdef';
Dump($y);
$y
};
Dump($x);
}
{
my $x = sub {
my $y = 'abcdef';
Dump($y);
$y
}->();
Dump($x);
}
__END__
SV = PV(0x226df4) at 0x226ce0
REFCNT = 1
FLAGS = (PADBUSY,PADMY,POK,pPOK)
PV = 0x1822b04 "abcdef"\0
CUR = 6
LEN = 8
SV = PV(0x226e24) at 0x226d34
REFCNT = 1
FLAGS = (PADBUSY,PADMY,POK,pPOK)
PV = 0x187a93c "abcdef"\0 <-- new buffer
CUR = 6
LEN = 8
SV = PV(0x226e0c) at 0x1830320
REFCNT = 1
FLAGS = (PADBUSY,PADMY,POK,pPOK)
PV = 0x182c84c "abcdef"\0
CUR = 6
LEN = 8
SV = PV(0x226e60) at 0x226d70
REFCNT = 1
FLAGS = (PADBUSY,PADMY,POK,pPOK)
PV = 0x1855fac "abcdef"\0 <-- new buffer
CUR = 6
LEN = 8
|