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



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

sub do_it($) {
    ...
}

我找不到解释这一点的文档。括号中的美元符号是什么意思?

它是一个子程序原型。

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

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

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

($)称为子例程原型

有关更多信息,请参见 PerlSub 手册页:http://perldoc.perl.org/perlsub.html#Prototypes

如今,原型设计并不常见。最佳做法是不使用它。

最新更新