Perl func2如何知道上下文?

Perl func2如何知道上下文?,perl,Perl,正如我们所知,Perl需要知道要计算的上下文,但是在上面的例子中,func2如何知道它在标量上下文或列表上下文中?。这是一张单子 func1(func2); 为什么??这完全是另一个问题-我假设,因为函数参数隐式地列出了可能出现的情况。如果func1没有原型(或@原型),那么它将是列表上下文。如果func1的原型是$,那么它将是标量上下文 警告:请不要使用原型,它们是。我认为它将是标量的,除非您为func1包含原型(alasub func1($$$))。@本·杰克逊:不,在没有原型的情况下,将

正如我们所知,Perl需要知道要计算的上下文,但是在上面的例子中,
func2
如何知道它在标量上下文或列表上下文中?

。这是一张单子

func1(func2);

为什么??这完全是另一个问题-我假设,因为函数参数隐式地列出了可能出现的情况。

如果func1没有原型(或
@
原型),那么它将是列表上下文。如果func1的原型是
$
,那么它将是标量上下文


警告:请不要使用原型,它们是。

我认为它将是标量的,除非您为
func1
包含原型(ala
sub func1($$$)
)。@本·杰克逊:不,在没有原型的情况下,将在列表上下文中调用
func2
,它是参数列表的一部分。您可能希望通过显示
f1
定义原型时发生的情况来完成此图。关于“为什么?”,您认为应在什么上下文中构造参数列表?
$ 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