()函数和函数()之间的区别(重复)

可能重复:
什么时候应该使用&来调用一个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信息:

  1. 一般描述 – 调用函数为&foo和foo()之间有什么区别?
  2. 有关使用&或不用于函数调用的细微信息 – perlsub:Perl子例程:描述 。