我正在尝试一种在Perl脚本中调用子例程的不同方法。
我有一组功能如下:
sub Testcase_CheckStatus {
print "TestCase_CheckStatus called\n";
}
然后我用“CheckStatus”这样的键遍历Perl哈希:
while (my ($k, $v) = each %test_cases) {
print "TestCase_$k","\n";
Testcase_$k();
}
基本上,我想在解析hash的键时调用上面的函数Testcase_CheckStatus,但是我收到了这个错误:
无法通过包“CheckStatus”找到对象方法“Testcase_”(也许你忘了在./main.pl第17行加载“CheckStatus”?)
我该怎么做才能解决这个问题?有没有其他方法可以做同样的事情?
答案 0 :(得分:13)
其他方式:
use 5.010;
use warnings;
use strict;
my $testcases = {
test_case_1 => sub {
return 1 * shift();
},
test_case_2 => sub {
return 3 * shift();
},
test_case_3 => \&SomeSub,
};
for (1 .. 3) {
say $testcases->{ 'test_case_' . $_ }(7);
}
sub SomeSub {
return 5 * shift();
}
答案 1 :(得分:6)
以下应该可以让你做你想做的事:
while (my ($k, $v) = each %test_cases) {
print "TestCase_$k","\n";
&{"Testcase_$k"}();
}
但是,如果strict
正在使用中,则无效。如果您使用strict
,则在while循环中需要no strict
,例如:
while (my ($k, $v) = each %test_cases) {
no strict 'refs';
print "TestCase_$k","\n";
&{"Testcase_$k"}();
}