func {なんかコード} = func(sub {なんかコード})の略らしい
sub Testfunc (&){return $_[0]->();}
Testfunc {print "hello kzfm"};
これはうまく動くが(&)がないと
sub Testfunc {return $_[0]->();}
Testfunc {print "hello kzfm"};
下のようなエラーが出る。
Not a CODE reference at test.pl line 1.
デバッガ動かしてみると先にTestfunc {print "hello kzfm"}がブロックとして評価されて、その後Testfunc {return $_[0]->();}が評価されるので$_[0]がコードブロックじゃないといわれているようだ。
プロトタイプで(&)ってことはコードブロック受け取ってるってことだよな。無名関数ってコードブロックか、、、あーなんとなくわかってきた気が。やっと{}がlispの括弧に見えてきた。