2011-07-29 17 views
0
func1(func2); 

Perlは評価するコンテキストを知る必要がありますが、上記のケースではfunc2はスカラーコンテキストまたはリストコンテキストであることをどのように知っていますか?func2はどのようにコンテキストを知っていますか?

+0

'func1'にプロトタイプ(ala' sub func1($$$) ')を含めない限り、スカラーになると思います –

+1

@Ben Jackson:いいえ、プロトタイプ' func2'がなければ呼び出されますlist context - 引数の* list *の一部です。 –

答えて

5

func1にプロトタイプ(または@プロトタイプ)がない場合、それはリストコンテキストになります。 func1のプロトタイプが$の場合、スカラコンテキストになります。

注意:プロトタイプを使用しないでください。evilです。

2

明らかに。それはリストです。

$ 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 

なぜですか?これはまったく別の質問です。関数のパラメータが暗黙的にリストにあるので、私は仮定します。

+0

'f1'がプロトタイプを定義するときに何が起こるかを示すことで、ここで画像を完成させたいかもしれません。 – Zaid

+1

「なぜ?」という議論のリストをどのような文脈で構築すべきだと思いますか? – ikegami

関連する問題