这可能是一个重复的问题。 我知道perl并不限制用户没有参数及其类型。 但是$,$$和;代表以下代码。
sub run($$;$) {
my ( $x, $y, $z ) = @_;
....
}
答案 0 :(得分:4)
它是prototype。高级perl功能通常不是一个好主意。它允许您指定子例程参数的约束。
在上面的例子中,它指定此子例程采用两个强制标量参数和一个可选标量。
E.g:
use strict;
use warnings;
sub with_proto($$;$) {
print @_;
}
with_proto("A");
with_proto("A","B");
with_proto("A","B","C");
with_proto("A","B","C","D");
错误:
Not enough arguments for main::with_proto, line 9, near ""A")"
Too many arguments for main::with_proto, line 12, near ""D")"
请注意 - 这也是错误:
my @args = ( "A", "B", "C" );
with_proto(@args);
因为尽管列表中有3个元素,但原型却说“标量”。
with_proto(@args, "A", "B");
将打印:
3AB
因为原型说“标量”'它在标量上下文中需要@args
。如果您完成了 this :
sub without_proto {
print @_;
}
my @args = ( "A", "B", "C" );
without_proto (@args, "A", "B");
你会得到" ABCAB"。
所以最好的情况是,这个功能并不像看起来那么清晰,并且与#34;原型"并不特别相似。你可能会用其他语言了解它们。