传递没有逗号的参数并产生不同的结果

Eug*_*e K 1 perl

我想弄清楚为什么这两行会产生不同的结果:

print($fh, "text"); --> 0x10101010 text (on STDOUT)

print($fh "text"); --> text (inside of file $fh)
Run Code Online (Sandbox Code Playgroud)

当我有逗号时,我理解我创建了一个列表,当打印只有一个列表时,它将列表打印到STDOUT.但是,当我没有逗号时,什么是打印呢?我想要的结果就是我没有逗号的结果.

这对我来说很奇怪,反对我期待带逗号的那个为我的预期目的而工作.代码我经常看到用" print $file "text"" 这样的行进行文件句打印,但我想使用括号,因为我发现它与其他语言更加一致.但是,不要使用逗号也是不一致的.

对"印刷"内部的解释可能有助于我理解.当没有逗号时,如何将FILEHANDLE和LIST分开?

文件:http://perldoc.perl.org/functions/print.html

谢谢!

And*_*ter 5

print 不是正常的函数,你不应该用括号调用它,因为你并没有真正将参数列表传递给函数.

我通常写的方式是

print {$fh} 'text';
print {$fh} 'text1', 'text2';
Run Code Online (Sandbox Code Playgroud)

或不去文件:

print 'text';
print 'text1', 'text2';
Run Code Online (Sandbox Code Playgroud)

你问"当没有逗号时,如何将FILEHANDLE和LIST分开?" 答案是"魔术,因为它不是正常的功能."

  • @ThisSuitIsBlackNot从第781行的[`perly.y`](http://perl5.git.perl.org/perl.git/blob/HEAD:/perly.y)查看"间接对象"的解析器定义符号".`print` builtin是一个列表运算符,在语法中称为`LSTOP`(或者当它看起来像普通的子程序时为`FUNC`). (2认同)