Perl の無名サブルーチンについて勘違いしていた

sub makefunc {
  my ($data) = @_;
  return sub {
    return $data;
  }
}

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