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

Perl子程序引用和匿名子程序

发布时间:2020-12-15 23:38:19 所属栏目:大数据 来源:网络整理
导读:子程序也有引用,也有匿名子程序。假设你已经具备了数组、hash的引用知识,所以这里简单介绍一下。 $ref_sub = mysub; # 子程序引用,符号必须不能少{$ref_sub}(ARGS) # 解除子程序引用,传递参数ARGS$ref_sub(ARGS) # 解除子程序引用$ref_sub-(ARGS) # 解

子程序也有引用,也有匿名子程序。假设你已经具备了数组、hash的引用知识,所以这里简单介绍一下。

$ref_sub = &;mysub;      # 子程序引用,&符号必须不能少
&{$ref_sub}(ARGS)        # 解除子程序引用,传递参数ARGS
&$ref_sub(ARGS)          # 解除子程序引用
$ref_sub->(ARGS)         # 解除子程序引用
$ref_sub->()             # 传递空参数

sub {...};               # 定义匿名子程序,sub后面没有名称
$ref_sub = sub {...};    # 匿名子程序的引用

有了子程序引用,就可以按需调用子程序。

例如:

sub java_learn {
    print "Learning Java nown";
}
sub perl_learn {
    print "Learning Perl nown";
}
sub python_learn {
    print "Learing Python nown";
}

%sub_hash=(
    "javaer"   => &;java_learn,"perler"   => &;perl_learn,"pythoner" => &;python_learn,);

while(my ($who,$sub)=each %sub_hash){
    print "$who is learningn";
    $sub->();
}

改成匿名子程序:

$javaer = sub {
    print "Learning Java nown";
};
$perler = sub {
    print "Learning Perl nown";
};
$pythoner = sub {
    print "Learing Python nown";
};

foreach (qw(javaer perler pythoner)){
    print "$_ is learningn";
    $$_->();
}

甚至,将匿名子程序作为数据结构的一部分:

%sub_hash = (
    "javaer" => sub {
        print "Learning Java nown";
    },"perler" => sub {
        print "Learning Perl nown";
    },"pythoner" => sub {
        print "Learning Python nown";
    },);

while( my($who,$sub)=each %sub_hash ){
    print "$who is learningn";
    $sub->();
}

子程序引用、匿名子程序的最大作用可能是用于回调函数(callback)、闭包(closure)。这个话题有点大,见下一篇文章。

(编辑:李大同)

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

    推荐文章
      热点阅读