我在我的工作中遇到了一些代码库中的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' 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 '', @_;
}
}
抛开这些子例程的意图(我不完全确定自己…),“参数列表”位置中的字符序列是什么意思?即这些例子中的$$$,$$; $$和$$@序列.
我对Perl的理解非常有限,但我相信我的($a,$b,$m)= @ _;第一个例子中的行(sum)将传递给子例程的参数解包到$a,$b和$m局部变量中.这表明$$$表示sum的类型和类型签名(在这种情况下,它需要三个标量).这可能表明gOut需要两个标量和一个数组.这是正确的解释吗?
即使上面的解释是正确的,我在第二个例程(gNode)中的分号的意思也没有了.