()函数和函数()之间的区别(重复)
可能重复:
什么时候应该使用&来调用一个Perl子程序?
在perl脚本中,为什么调用该函数的方法有时被写入不同的方法。 我看到&function,有时function()。 他们都是一样的,这只是一个人想要炫耀的风格吗? 如果他们是一样的,为什么他们都可用,不就够了吗? 我猜测这两种方法之间存在一些语义上的区别,但是在什么样的情况下呢?
—由于超时原因我无法回答自己的问题,因此我正在更新问题部分的答案。 当我有机会更新答案块时,我会把它放在那里。
我在“学习Perl”书中find了相关的文字。 第4章:子程序 – 省略&符号。
我对perl函数的&符号更感兴趣。 如果在调用子程序之前已经定义了子程序,那么调用子程序时不需要调用类似于调用内build函数的函数。 &也被用来区分内build函数和用户定义的函数,如果被调用的函数使用与内build函数相同的名字,只要它在被调用之前被定义。
()的使用仅仅是为了将parameter passing给子例程,而如果不使用,当前参数的默认列表以@_的forms传递。 如果在()中为子例程指定了参数,则假定它是一个子例程,并且即使之前在parsing时没有定义,也会被调用。
它有非常具体的用途:
- 告诉Perl忽略子的原型。
-
&
可以让您使用来电者的@_
。 (&foo;
没有parens或参数)。 -
goto &foo;
并defined &foo
。 - 获取参考(例如
\&foo
)。
有些人(主要是初学者)使用它来区分用户子集和内置函数,因为内置函数不能在&
之前。
正如@manatwork和@KeithThompson所提到的,你可以在这些文章中find信息:
- 一般描述 – 调用函数为&foo和foo()之间有什么区别?
- 有关使用
&
或不用于函数调用的细微信息 – perlsub:Perl子例程:描述 。