cdl*_*ary 4 perl iterator function
我试图弄清楚如何迭代子程序refs数组.
这个语法出了什么问题?
use strict;
use warnings;
sub yell { print "Ahh!\n"; }
sub kick { print "Boot!\n"; }
sub scream { print "Eeek!\n"; }
my @routines = (\&yell, \&kick, \&scream);
foreach my $routine_ref (@routines) {
my &routine = &{$routine_ref};
&routine;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
cow*_*god 10
在foreach循环中,以下是语法错误:
my &routine;
Run Code Online (Sandbox Code Playgroud)
你的变量$routine_ref已经有了对子程序的引用,所以你需要做的就是调用它:
for my $routine_ref (@routines) {
&{$routine_ref};
}
Run Code Online (Sandbox Code Playgroud)
和Perl一样,"有多种方法可以做到这一点." 例如,如果这些子例程中的任何一个采用了参数,您可以在括号内传递它们,如下所示:
for my $routine_ref (@routines) {
$routine_ref->();
}
Run Code Online (Sandbox Code Playgroud)
另请注意,我使用的是for代替foreach,这是Damian Conway在Perl最佳实践中提出的最佳实践.
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |