我想使用匿名子而不是命名子的原因是因为我想在Mason子组件中定义这些子组件(http://www.masonbook.com/book/chapter-2.mhtml#TOC-ANCHOR-7),与命名的潜艇表现不佳.
例如,如果我以这种方式编写代码:
my ($first, $second);
$first = sub {
my $val = shift;
print "val: $val";
$second->($val);
};
$second = sub {
my $val = shift;
if (0 < $val) {
$val = $val - 1;
$first->($val);
}
};
$first->(10);
Run Code Online (Sandbox Code Playgroud)
这种方法中是否存在任何隐藏的陷阱(例如内存泄漏等)?
正如@Schwern所解释的那样,Perl不会释放这些子的内存,因为它们之间存在循环引用.
但更具体地说,内存分配是否会线性增长,因为$ val会增加,或者它不依赖于调用堆栈深度?因为我可以将这些子元素放在mason <%once>块中,在这种情况下,这些子函数只会被初始化一次.