先看看这里:http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q3.14.html 里面开始引用了Larry关于闭包的说法,翻译成中文大意是“这是一个来自于Lisp世界的名词,意指当你在某个特定的词法范围内定义了一个匿名函数,那么当你在该词法范围之外调用这个匿名函数时,它还是跟在这个词法范围内一样运行”。有点拗口,不过通过例子来更容易解释。
#!perl -w
use strict;
use warnings;
sub make_new_counter {
my $start = shift;
return sub {
print $start++, "/n";
};
}
my $ten = &make_new_counter(10);
my $three = &make_new_counter(3);
$ten->();
$three->();
$ten->();
$three->();
$ten->();
$three->();
来看看“闭包(closure)”这个词的来由,本意应该就是指这个匿名函数,它包含(wrap or enclosing?)了自己所用到的所有词法变量。可以参考http://www.perl.com/pub/a/2002/05/29/closure.html。
上面这个例子的运行结果是:
10
3
11
4
12
5
如果把my $start;改为our $start会出现什么结果呢?
3
4
5
6
7
8
参考《web应用mod_perl中的变量申明问题》:http://www.chinaunix.net/jh/25/653732.html