gpt4 book ai didi

perl - Perl 参数列表中的美元、at 符号和分号字符是什么意思?

转载 作者:行者123 更新时间:2023-12-04 16:47:08 24 4
gpt4 key购买 nike

在我的工作中,我在代码库中遇到了许多 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 的了解非常有限,但我相信 my($a,$b,$m)=@_;第一个示例中的行 ( sum) 将传递给子例程的参数解压缩到 $a 中。 , $b$m局部变量。这表明 $$$表示 sum 的数量和类型签名(在这种情况下,它需要三个标量)。这可能表明 gOut需要两个标量和一个数组。这是正确的解释吗?

即使上述解释是正确的,我也不知道第二个例程中分号的含义( gNode )。

最佳答案

perldoc perlsub原型(prototype)上的条目。

 # Declared as            Called as
sub mylink ($$) mylink $old, $new
sub myvec ($$$) myvec $var, $offset, 1
sub myindex ($$;$) myindex &getstring, "substr"
sub mysyswrite ($$$;$) mysyswrite $buf, 0, length($buf) - $off, $off
sub myreverse (@) myreverse $a, $b, $c
sub myjoin ($@) myjoin ":", $a, $b, $c
sub mypop (+) mypop @array
sub mysplice (+$$@) mysplice @array, 0, 2, @pushme
sub mykeys (+) mykeys %{$hashref}
sub myopen (*;$) myopen HANDLE, $name
sub mypipe (**) mypipe READHANDLE, WRITEHANDLE
sub mygrep (&@) mygrep { /foo/ } $a, $b, $c
sub myrand (;$) myrand 42
sub mytime () mytime

不要忘记: 当然,这一切都非常强大,只能适度使用,以使世界变得更美好。

关于perl - Perl 参数列表中的美元、at 符号和分号字符是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18006898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com