名前付きの代わりに匿名のサブを使用したい理由は、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 によって解放されません。これは、それらの間に循環参照があるためです。
しかし、より具体的に言えば、メモリ割り当ては $val が増加するにつれて直線的に増加しますか、それとも呼び出しスタックの深さに依存しませんか? これらのサブルーチンを mason <%once> ブロックに配置できるため、その場合、これらのサブルーチンは一度だけ初期化されます。