Perl の無名サブルーチンについて勘違いしていた
sub makefunc { my ($data) = @_; return sub { return $data; } }
のようなコードがあった場合,&makefunc($foo) と呼び出されたときに $data は $foo として一度だけ評価されるんだと思っていたんですが,$data という仮変数の実体は sub の中で persistent に生き続けるんですね。今日までずっと勘違いしていました。ObjectPascal でいうところのクロージャを作るときしか使っていなかったんで,Perl のクロージャ - naoyaのはてなダイアリー を読んでもピンときていませんでしたが,今はなるほどなぁと思います。
そういえば perlsub の Persistent Private Variables に書いてあるし。読んだことあったのに(そして感心すらしていたのに)忘れていました。