Perl子程序括号中的美元字符是什么意思?

时间:2016-04-27 10:29:04

标签: perl

我继承了一些Perl代码,偶尔也会看到这样定义的子程序:

sub do_it($) {
    ...
}

我无法找到解释此问题的文档。括号中的美元符号是什么意思?

2 个答案:

答案 0 :(得分:6)

这是subroutine prototype

$表示sub只接受单个标量值,并使用标量上下文解释其他类型。例如,如果您将数组作为参数传递,例如do_it(@array),Perl不会将@array扩展为列表,而是将数组的长度传递给子例程主体。

这有时很有用,因为Perl可以在错误地调用子例程时给出错误消息。此外,Perl的解释器可以使用原型来消除方法调用的歧义。我已经看到&符号(代码块原型)非常巧妙地用于编写调用匿名代码的本机代码。

然而,它只适用于某些情况 - 例如它在OO Perl中不能很好地工作。因此它的使用有点不完整。 Perl Best Practices建议不要使用它们。

答案 1 :(得分:5)

($)被称为子例程原型

有关详细信息,请参阅PerlSub手册页:http://perldoc.perl.org/perlsub.html#Prototypes

现在原型制作并不常见。 Best Practice is not using it