【发布时间】:2012-08-21 15:16:58
【问题描述】:
这是直接取自 Perl Cookbook 的代码:
@colors = qw(red blue green yellow orange purple violet);
for my $name (@colors) {
no strict 'refs';
*$name = sub { "<FONT COLOR='$name'>@_</FONT>" };
}
它的目的是形成6个不同颜色的不同子程序。在解释部分,书中写道:
这些函数看起来都是独立的,但真正的代码实际上只编译了一次。这种技术 节省编译时间和内存使用。要创建正确的闭包,匿名中的任何变量 子程序必须是词法。这就是循环迭代变量上 my 的原因。
适当的关闭是什么意思,如果省略my会发生什么?另外,即使不能为词法变量定义 typeglob 并且应该抛出错误,为什么 typeglob 会使用词法变量?
【问题讨论】:
标签: perl closures subroutine lexical typeglob