http://www.perlmonks.org?node_id=719554


in reply to Re^2: Lexical closures
in thread Lexical closures

No. The confusion is that Perl effectively closes over the value of the variable, not a reference to the variable.

All languages that I know where you can declare a variable locally to the scope of a block (including a block for a loop) effectively set up a new stack frame on each entry to the block, but the loop variable is outside that block or it couldn't maintain its contents from one iteration to the next.


Perl reduces RSI - it saves typing

Replies are listed 'Best First'.
Re^4: Lexical closures
by JavaFan (Canon) on Oct 25, 2008 at 23:03 UTC
    The confusion is that Perl effectively closes over the value of the variable, not a reference to the variable.
    sub make_funcs { my $val = shift; (sub {$val * $val}, sub {$val++}) } my($f3, $i3) = make_funcs(3); my($f5, $i5) = make_funcs(5); say $f3->(); say $f5->(); $i3->(); say $f3->(); say $f5->(); __END__ 9 25 16 25
    I can't explain my results in combination with your claim.