Perl参数列表中的美元、at符号和分号字符是什么意思?
在我的工作中,我在代码库中遇到了许多Perl脚本。其中一些包含具有以下语法奇怪的子例程:Perl参数列表中的美元、at符号和分号字符是什么意思?,perl,parameters,Perl,Parameters,在我的工作中,我在代码库中遇到了许多Perl脚本。其中一些包含具有以下语法奇怪的子例程: sub sum($$$) { my($a,$b,$m)=@_; for my $i (0..$m) { $$a[$i] += $$b[$i] if $$b[$i] > 0; } } sub gNode($$;$$) { my($n,$l,$s,$d) = @_; return ( "Node name='$n' labe
sub sum($$$) {
my($a,$b,$m)=@_;
for my $i (0..$m) {
$$a[$i] += $$b[$i] if $$b[$i] > 0;
}
}
sub gNode($$;$$) {
my($n,$l,$s,$d) = @_;
return (
"Node name='$n' label='$l' descr='$d'" ,
$s ? ("Shape type='$s' /") : (),
'/Node'
);
}
sub gOut($$@) {
my $h = shift;
my $i = shift;
if ($i > 0) {
print $h (('')x$i, map '<'.$_.'>', @_);
} else {
print $h map '<'.$_.'>', @_;
}
}
小计($$){
我的($a,$b,$m)=@;
对于我的$i(0..$m){
$$a[$i]+=$$b[$i]如果$$b[$i]>0;
}
}
子gNode($$;$$){
我的($n,$l,$s,$d)=;
返回(
“节点名称='$n'标签='$l'描述='$d'”,
$s?(“形状类型='$s'/”):(),
“/Node”
);
}
亚痛风($$@){
我的$h=班次;
我的$i=班次;
如果($i>0){
打印$h((“”)x$i,地图“”,@41;;
}否则{
打印$h地图“”,@;
}
}
撇开这些子程序的作用不谈(我自己也不完全确定……),在“参数列表”位置的字符序列意味着什么?即。$$
,$$$$这些示例中的code>和$$@
序列
我对Perl的理解非常有限,但我相信my($a,$b,$m)=@第一个示例中的代码>行(sum
)将传递给子例程的参数解压到$a
、$b
和$m
局部变量中。这表明$$
表示和的算术和类型签名(在本例中,它需要三个标量)。这可能意味着gOut
需要两个标量和一个数组。这是正确的解释吗
即使上述解释是正确的,我也不知道第二个例程(gNode
)中分号的含义。参见原型条目
别忘了:这当然是非常强大的,应该适度使用,让世界变得更美好。我同意其他观点:除非你知道自己在做什么,否则不要使用子原型。“强大的力量带来巨大的责任。”这些看起来像是由习惯于C原型的人创建的。例如,subsum
确实应该具有以下原型:
sub sum (\$\$\$) {
这些符号通常意味着代码是由不知道自己在做什么的人编写的。Perl原型只在少数情况下真正有用。而这些都不是这些案例中的任何一个。请参阅前面is中引用的Perl节点。对于计划在Perl中使用原型的人来说,这应该是必读的。您只需要阅读一次,因为您不打算在阅读后使用Perl中的原型。
sub sum (\$\$\$) {