標籤:數組 介紹 \n 程式 調用 ... one llb 沒有
子程式也有引用,也有匿名子程式。假設你已經具備了數組、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\n";}sub perl_learn { print "Learning Perl now\n";}sub python_learn { print "Learing Python now\n";}%sub_hash=( "javaer" => \&java_learn, "perler" => \&perl_learn, "pythoner" => \&python_learn,);while(my ($who,$sub)=each %sub_hash){ print "$who is learning\n"; $sub->();}
改成匿名子程式:
$javaer = sub { print "Learning Java now\n";};$perler = sub { print "Learning Perl now\n";};$pythoner = sub { print "Learing Python now\n";};foreach (qw(javaer perler pythoner)){ print "$_ is learning\n"; $$_->();}
甚至,將匿名子程式作為資料結構的一部分:
%sub_hash = ( "javaer" => sub { print "Learning Java now\n"; }, "perler" => sub { print "Learning Perl now\n"; }, "pythoner" => sub { print "Learning Python now\n"; },);while( my($who,$sub)=each %sub_hash ){ print "$who is learning\n"; $sub->();}
子程式引用、匿名子程式的最大作用可能是用於回呼函數(callback)、閉包(closure)。這個話題有點大,見下一篇文章。
Perl子程式引用和匿名子程式