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.
 
p
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.