2015-08-16 40 views

回答

9

print是有特殊的语法规则特殊内置Perl函数。 Documentation列出四种可能的调用:

print FILEHANDLE LIST 
print FILEHANDLE 
print LIST 
print 

因此,虽然在一般的函数参数由逗号(,)是分离的,这是从歧义消除内容打印目标的例外打印。显示此行为的另一个函数是system

共享此语法的其他功能称为"Indirect Object Notation"。在形式表达:

function object arg1, arg2, … angn 
#    ^- no comma here 

等同于:

object->function(arg1, arg2, … argn) 

让下面的语句对是相同的:

$foo = new Bar; 
$foo = Bar->new; 

间接对象符号具有several problems,一般应该避免,保存为数不多的知名成语,如print F "something"

+2

不幸的是,这是错误的。 'print'是具有自定义分析规则的运算符。 'print HANDLE LIST'不是一个间接的方法调用。它会忽视HANDLE的课程。你可以使用'perl -MScalar :: Util = blessed -E'sub IO :: File :: print {die}来验证它是否有福(* STDOUT {IO});打印标准输出“foo \ n”; STDOUT-> print(“foo \ n”);'' – ikegami

+0

@ikegami:非常感谢您的指出! –

4

在该示例中,因为print接受参数列表并且具有默认值。所以你需要告诉打印一个标量和打印文件句柄之间的区别。

解释器可以告诉之间的区别:

print $fh "some scalar text"; 
print $bar, "set to a value ","\n"; 
print $fh; 
print $bar; 

但是,这是一个比较特殊的情况 - 大部分功能不喜欢的工作。我通常建议打印,围绕大括号中的文件句柄arg区分。

你可以看一下原型,以此来获得perl的做事情的参数,但我还常建议,使更少的代码清晰

+1

有我这是一个额外的转折点。在上面的例子中,第三行和第四行将打印$ fh和$ bar到当前选定的文件句柄。另一方面,“打印FH”会打印$ _到真正的文件句柄FH。 – BarneySchmale