Perl子程序引用和匿名子程序
Posted f-ck-need-u
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl子程序引用和匿名子程序相关的知识,希望对你有一定的参考价值。
子程序也有引用,也有匿名子程序。假设你已经具备了数组、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 now
";
}
sub perl_learn {
print "Learning Perl now
";
}
sub python_learn {
print "Learing Python now
";
}
%sub_hash=(
"javaer" => &java_learn,
"perler" => &perl_learn,
"pythoner" => &python_learn,
);
while(my ($who,$sub)=each %sub_hash){
print "$who is learning
";
$sub->();
}
改成匿名子程序:
$javaer = sub {
print "Learning Java now
";
};
$perler = sub {
print "Learning Perl now
";
};
$pythoner = sub {
print "Learing Python now
";
};
foreach (qw(javaer perler pythoner)){
print "$_ is learning
";
$$_->();
}
甚至,将匿名子程序作为数据结构的一部分:
%sub_hash = (
"javaer" => sub {
print "Learning Java now
";
},
"perler" => sub {
print "Learning Perl now
";
},
"pythoner" => sub {
print "Learning Python now
";
},
);
while( my($who,$sub)=each %sub_hash ){
print "$who is learning
";
$sub->();
}
子程序引用、匿名子程序的最大作用可能是用于回调函数(callback)、闭包(closure)。这个话题有点大,见下一篇文章。
以上是关于Perl子程序引用和匿名子程序的主要内容,如果未能解决你的问题,请参考以下文章