【发布时间】:2015-12-27 09:02:41
【问题描述】:
我想使用匿名子组件而不是命名子组件的原因是因为我想在 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);
这种方法是否存在任何隐藏的陷阱(例如内存泄漏等)?
正如@Schwern 所解释的,Perl 不会释放这些 subs 的内存,因为它们之间存在循环引用。
但更具体地说,内存分配会随着 $val 的增加而线性增长,还是不依赖于调用堆栈深度?因为我可以将这些 subs 放在 mason 块中,在这种情况下,这些 subs 只会被初始化一次。
【问题讨论】: