Perl中的函数参数分隔符?

Tho*_*son 4 perl

函数参数通常用逗号(,)分隔,但在某些情况下似乎也是空格,比如print FILEHANDLE 'string'.为什么这两个分隔符都是必需的?

el.*_*ado 10

print是特殊的内置Perl函数,具有特殊的语法规则.文档列出了四种可能的调用:

print FILEHANDLE LIST
print FILEHANDLE
print LIST
print
Run Code Online (Sandbox Code Playgroud)

因此,虽然通常函数参数由逗号(,)分隔,但这是一个例外,它消除了打印目标与要打印的内容的歧义.表现出这种行为的另一个功能是system.

共享此语法的其他功能称为"间接对象表示法".表达形式:

function object arg1, arg2, … angn
#              ^- no comma here
Run Code Online (Sandbox Code Playgroud)

相当于:

object->function(arg1, arg2, … argn)
Run Code Online (Sandbox Code Playgroud)

因此,以下语句对是等效的:

$foo = new Bar;
$foo = Bar->new;
Run Code Online (Sandbox Code Playgroud)

间接对象​​表示法有几个问题,一般应该避免,除了少数众所周知的习语,如print F "something"

  • 不幸的是,这是错误的.`print`是一个具有自定义解析规则的运算符.`print HANDLE LIST`不是间接方法调用.它将无视HANDLE的课程.您可以使用`perl -MScalar :: Util = blessed -E'sub IO :: File :: print {die}来验证这一点.祝福(*STDOUT {IO}); print STDOUT"foo \n"; STDOUT->打印( "富\n");'` (2认同)