& LogIt()的基础知识

时间:2012-10-15 09:51:26

标签: perl file logging

  

可能重复:
  When should I use the & to call a Perl subroutine?

我是Perl开发的新手,只是通过示例代码。

我遇到了& LogIt(),我开始时几乎没有基本问题。我从Google那里获得了信息,就像它将错误/消息记录到日志文件中一样。

&LogIt("Failed to create folder."); 

在上面的代码中,'&'是什么代表? & LogIt()和LogIt()之间是否有任何差异/影响? msg“创建文件夹失败”会在某处打印出来吗?谁会使用这个消息?

请告诉我一些关于& LogIt()的基础知识。

2 个答案:

答案 0 :(得分:3)

这具有考古价值。 &符号用于调用子程序。你会发现所有血腥细节on that page

它仍然有效,但不应该使用,除非是非常特殊的情况(比如引用子程序或检查它是否已定义)。

请注意,&foo&foo()并不意味着相同的事情。后者从括号中获取参数(如果没有提供,则为无)。前者不能使用参数调用,而是将@_的当前值作为参数。因此,以下块:

@_ = ( 10, 20 ) ;
&foo( ) ;
&foo ;

sub foo { print "args=$_[0], $_[1]\n" ; }

将产生以下输出:

args=, 
args=10, 20

答案 1 :(得分:0)

函数前面的&的行为类似于标量前面的$。解释器告诉我这个特定变量是什么。

但是如果有括号,则不需要使用括号。因此,&foo &foo()foo()意味着几乎相同的事情。

它们之间的区别在于传递给函数的参数。对foo()的调用不传递任何参数。对&foo的调用会将当前@_传递给foo。

显式和使用sigil的优点是你可以在使用它时省略空()。例如

&foo
foo()

如果foo未检查其参数或当前@_为空。

或者,如果你必须致电foo(@_),你可以简单地写

`&foo`

但是我会说很多perl程序员仍然倾向于使用(),即使在不需要它作为唯一其他语言(我知道)的情况下,可选括号是COBOL。

只需决定您是否打算在整个代码库中使用&并坚持下去!否则,阅读可能会令人困惑(或烦人)。