我正在尝试一种在Perl脚本中调用子例程的不同方法.
我有一组功能如下:
sub Testcase_CheckStatus {
print "TestCase_CheckStatus called\n";
}
Run Code Online (Sandbox Code Playgroud)
然后我用"CheckStatus"这样的键遍历Perl哈希:
while (my ($k, $v) = each %test_cases) {
print "TestCase_$k","\n";
Testcase_$k();
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想在解析哈希的键时调用上面的函数Testcase_CheckStatus,但是我收到了这个错误:
无法通过包"CheckStatus"找到对象方法"Testcase_"(也许你忘了在./main.pl第17行加载"CheckStatus"?)
我该怎么做才能解决这个问题?有没有其他方法可以做同样的事情?
w.k*_*w.k 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();
}
Run Code Online (Sandbox Code Playgroud)
以下应该可以让你做你想做的事:
while (my ($k, $v) = each %test_cases) {
print "TestCase_$k","\n";
&{"Testcase_$k"}();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果strict正在使用,这将不起作用.如果您正在使用strict,则需要no strict在while循环内部,例如:
while (my ($k, $v) = each %test_cases) {
no strict 'refs';
print "TestCase_$k","\n";
&{"Testcase_$k"}();
}
Run Code Online (Sandbox Code Playgroud)