加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 22:01:33 所属栏目:大数据 来源:网络整理
导读:我在我的工作中遇到了一些代码库中的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' la
我在我的工作中遇到了一些代码库中的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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读