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

正如我們所知,Perl需要知道要評估的上下文,但在上述情況下,func2怎麼知道它是標量或列表上下文中的?func2如何知道上下文?

+0

我認爲這將是標量,除非你爲'func1'包含原型(ala'sub func1($$$)') –

+1

@Ben Jackson:不,在沒有原型的情況下'func2'會被調用列表上下文 - 它是參數列表*的一部分。 –

回答

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

Re「爲什麼?」,你認爲應該在什麼情況下構建一個參數列表? – ikegami