in reply to Re: slurping styles
in thread slurping styles

Do you care to explain why does the do version uses 2x as much memory?
[]s, HTH, Massa (κς,πμ,πλ)

Replies are listed 'Best First'.
Re^3: slurping styles
by ikegami (Patriarch) on Aug 01, 2008 at 11:36 UTC

    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
Re^3: slurping styles
by moritz (Cardinal) on Aug 01, 2008 at 11:44 UTC
    I'd think that do block creates an anonymous lexical variable to hold the last value, and its content is being copies to the caller.

    Try to measure the memory for returning something like [ <$handle> ], if my theory holds it won't use twice as much memory then because only the array reference is copied.