在名单上
该结构的bareword (LIST1), LIST2
意思是“将函数bareword
应用于参数LIST1
”,虽然bareword +(LIST1), LIST2
可以,但不一定意味着“应用于bareword
组合列表的参数LIST1, LIST2
”。这对于分组参数很重要:
my ($a, $b, $c) = (0..2);
print ($a or $b), $c; # print $b
print +($a or $b), $c; # print $b, $c
前缀+
也可以用来区分 hashrefs 和 block,以及函数和 barewords,例如在下标 hash 时:$hash{shift}
返回shift
元素,同时$hash{+shift}
调用函数shift
并返回 value 的 hash 元素shift
。
间接语法
在面向对象的 Perl 中,您通常使用箭头语法调用对象上的方法:
$object->method(LIST); # call `method` on `$object` with args `LIST`.
但是,可以但不推荐使用将动词放在首位的间接表示法:
method $object (LIST); # the same, but stupid.
因为类只是它们自身的实例(在句法意义上),你也可以在它们上调用方法。这就是为什么
new Class (ARGS); # bad style, but pretty
是相同的
Class->new(ARGS); # good style, but ugly
但是,这有时会混淆解析器,因此不建议使用间接样式。
但它确实暗示了 print 的作用:
print $fh ARGS
是相同的
$fh->print(ARGS)
实际上,文件句柄$fh
被视为类的对象IO::Handle
。
(虽然这是一个有效的句法解释,但它并不完全正确。它IO::Handle
本身的源代码使用了这一行print $this @_;
。打印函数就是这样定义的。)