Perl参数列表中的美元,符号和分号是什么意思?

前端之家收集整理的这篇文章主要介绍了Perl参数列表中的美元,符号和分号是什么意思?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的工作中遇到了一些代码库中的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,$m)= @ _;第一个例子中的行(sum)将传递给子例程的参数解包到$a,$b和$m局部变量中.这表明$$$表示sum的类型和类型签名(在这种情况下,它需要三个标量).这可能表明gOut需要两个标量和一个数组.这是正确的解释吗?

即使上面的解释是正确的,我在第二个例程(gNode)中的分号的意思也没有了.

解决方法

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

不要忘记:这当然是非常强大的,应该只适用于使世界变得更美好.

原文链接:/Perl/171504.html

猜你在找的Perl相关文章