$$ in perl 子程序定义
$$ in perl subroutine definition
这可能是一个重复的问题。
我知道 perl 不会限制用户使用参数及其类型。
但是 $,$$ 和 ; 是什么意思?在下面的代码中代表。
sub run($$;$) {
my ( $x, $y, $z ) = @_;
....
}
这是一个 prototype。一个高级的 perl 功能,通常不是一个好主意。它允许您指定对子例程参数的约束。
在上面的例子中,它指定这个子程序接受两个强制标量参数和一个可选标量。
例如:
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 个元素,但原型显示 'scalars'。
with_proto(@args, "A", "B");
将打印:
3AB
因为原型说 'scalar' 它在标量上下文中需要 @args
。如果你像 this:
sub without_proto {
print @_;
}
my @args = ( "A", "B", "C" );
without_proto (@args, "A", "B");
你会得到 "ABCAB"。
所以充其量,它是一个功能,并不像看起来那么清晰,并且与您在其他语言中可能知道的 "prototypes" 并不特别相似。
这可能是一个重复的问题。 我知道 perl 不会限制用户使用参数及其类型。 但是 $,$$ 和 ; 是什么意思?在下面的代码中代表。
sub run($$;$) {
my ( $x, $y, $z ) = @_;
....
}
这是一个 prototype。一个高级的 perl 功能,通常不是一个好主意。它允许您指定对子例程参数的约束。
在上面的例子中,它指定这个子程序接受两个强制标量参数和一个可选标量。
例如:
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 个元素,但原型显示 'scalars'。
with_proto(@args, "A", "B");
将打印:
3AB
因为原型说 'scalar' 它在标量上下文中需要 @args
。如果你像 this:
sub without_proto {
print @_;
}
my @args = ( "A", "B", "C" );
without_proto (@args, "A", "B");
你会得到 "ABCAB"。
所以充其量,它是一个功能,并不像看起来那么清晰,并且与您在其他语言中可能知道的 "prototypes" 并不特别相似。