我是Perl开发的新手,只是通过示例代码。
我遇到了& LogIt(),我开始时几乎没有基本问题。我从Google那里获得了信息,就像它将错误/消息记录到日志文件中一样。
&LogIt("Failed to create folder.");
在上面的代码中,'&'是什么代表? & LogIt()和LogIt()之间是否有任何差异/影响? msg“创建文件夹失败”会在某处打印出来吗?谁会使用这个消息?
请告诉我一些关于& LogIt()的基础知识。
答案 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。
只需决定您是否打算在整个代码库中使用&
并坚持下去!否则,阅读可能会令人困惑(或烦人)。