func1(func2);
Perlは評価するコンテキストを知る必要がありますが、上記のケースではfunc2
はスカラーコンテキストまたはリストコンテキストであることをどのように知っていますか?func2はどのようにコンテキストを知っていますか?
func1(func2);
Perlは評価するコンテキストを知る必要がありますが、上記のケースではfunc2
はスカラーコンテキストまたはリストコンテキストであることをどのように知っていますか?func2はどのようにコンテキストを知っていますか?
func1にプロトタイプ(または@
プロトタイプ)がない場合、それはリストコンテキストになります。 func1のプロトタイプが$
の場合、スカラコンテキストになります。
注意:プロトタイプを使用しないでください。evilです。
明らかに。それはリストです。
$ perl
sub f1 { print "called f1\n" }
sub f2 { print "called f2\n"; print wantarray ? "list": "scalar"; print "\n"; }
f1(f2);
^d
called f2
list
called f1
なぜですか?これはまったく別の質問です。関数のパラメータが暗黙的にリストにあるので、私は仮定します。
'func1'にプロトタイプ(ala' sub func1($$$) ')を含めない限り、スカラーになると思います –
@Ben Jackson:いいえ、プロトタイプ' func2'がなければ呼び出されますlist context - 引数の* list *の一部です。 –