perl中&function和function()之间的区别

18 perl

可能重复:
我何时应该使用&来调用Perl子例程?

在perl脚本中,为什么调用函数的方法有时会被不同地编写.我看到&功能,有时候功能().它们是否相同,这只是一种人们想要炫耀的风格?如果它们是相同的,为什么它们都可用,是不是只需要一个?我猜这两种方法之间存在一些语义差异,这些方法将它们彼此区分开......但在什么样的情况下呢?

---由于我因超时原因无法回答我自己的问题 - 我正在更新问题部分的答案.当我有机会更新答案块时,我会把它放在那里.

我在"学习Perl"一书中找到了相关的文字.但感谢提示.第4章:子程序 - 省略&符号.

我对perl函数的&符号用法更感兴趣.如果在调用之前已经定义了子例程,则可以在不调用函数的情况下调用子例程,同时调用类似于调用内置函数的函数.如果要调用的函数使用与内置函数之一相同的名称(如果在调用之前定义),则还用于区分内置函数和用户定义函数.

()的用法仅仅是为了证明将参数传递给子例程是合理的,而如果不使用,则默认的当前参数列表以@_的形式传递.如果在子程序的()中指定了参数,则假定它是一个子程序,即使先前在解析时没有定义,也会被调用.

ike*_*ami 19

它有非常具体的用途:

  • & 告诉Perl忽略子的原型.
  • &可以让你使用来电者@_.(&foo;没有parens或参数).
  • goto &foo;defined &foo.
  • 获得参考(例如\&foo).

有些人(主要是初学者)使用它来区分用户子和内置函数,因为内置函数不能在其之前&.

  • @jackthehipster,命名约定,虽然我质疑它的必要性.谁在乎谁写了它.`utf8 :: encode`是内置函数并且`Encode :: encode_utf8`不是吗? (2认同)

mae*_*ics 5

正如@manatwork 和@KeithThompson 所提到的,您可以在这些文章中找到信息:

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