in reply to Re: (tye)Re2: A Real Closure
in thread Unusual Closure Behaviour

Ok, I'll try (though see John M. Dlugosz's answer just above):
> perl -lwe'sub k{my $x; sub j{++$x}; return sub{++$x} } k(); $a=\&j; k(); $b=\&j; $c=k(); $d=k(); print"a b c d"; $,=$"; print &$a, &$b, &$c, &$d for 0..2' Variable "$x" will not stay shared at -e line 1. a b c d 1 2 1 1 3 4 2 2 5 6 3 3 >
That is a and b are just two references to the same function and its (compiled-in) variable. c and d refer to different functons (with the same code) each with its own (run-time declared) variable.

c and d are closer to what is referred to elsewhere as closures. (Not everywhere else, the original usage in set theory is yet another thing.)

update Obviously I didn't reload the page before submitting. I thought tye had left, so it would be safe to try to answer without being compared to his much more complete answers. I'll leave mine up anyway, in the hope that repetition aids understanding.