首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本知识&LogIt()

基本知识&LogIt()
EN

Stack Overflow用户
提问于 2012-10-15 09:51:26
回答 2查看 922关注 0票数 0

可能重复: 什么时候应该使用&调用Perl子例程?

我对Perl开发很陌生,只需要看一看示例代码。

我遇到了&LogIt(),首先我几乎没有什么基本问题要问。我从Google获得信息,就像它将错误/msgs记录到日志文件中一样。

代码语言:javascript
复制
&LogIt("Failed to create folder."); 

在上面的代码中,'&‘代表什么?在&LogIt()和LogIt()之间有什么区别/影响吗?msg“未能创建文件夹”会在某个地方打印吗?谁会用这个味精?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-15 09:56:31

这具有考古价值。符号被用来调用子例程。你会发现所有血淋淋的细节在那一页上

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

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

代码语言:javascript
复制
@_ = ( 10, 20 ) ;
&foo( ) ;
&foo ;

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

将产生以下产出:

代码语言:javascript
复制
args=, 
args=10, 20
票数 3
EN

Stack Overflow用户

发布于 2012-10-15 09:55:31

函数前面的&就像标量前面的$一样。它是解释器告诉特定变量是什么的信号。

但是,对于函数,如果有括号,则不需要它。因此,&foo &foo()foo()的含义几乎相同。

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

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

代码语言:javascript
复制
&foo
foo()

如果foo不检查它的参数,或者当前的@_是空的。

或者,如果您必须调用foo(@_),您可以简单地编写

代码语言:javascript
复制
`&foo`

然而,我要说的是,许多perl程序员仍然倾向于使用(),即使在不需要它的情况下也是如此,因为只有COBOL是唯一具有可选括号的语言(我知道)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12893148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档