3

我正在尝试一种在 Perl 脚本中调用子例程的不同方式。

我有一组功能如下:

sub Testcase_CheckStatus {
    print "TestCase_CheckStatus called\n";
}

然后我使用“CheckStatus”之类的键遍历 Perl 哈希:

while (my ($k, $v) = each %test_cases) {
    print "TestCase_$k","\n";
    Testcase_$k();
}

基本上,我想在解析哈希键时调用上面的函数 Testcase_CheckStatus ,但是我收到了这个错误:

无法通过包“CheckStatus”找到对象方法“Testcase_”(也许您忘记加载“CheckStatus”?)在 ./main.pl 第 17 行

我能做些什么来纠正这个问题?有没有其他方法可以做同样的事情?

4

2 回答 2

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();
}
于 2012-05-21T09:53:19.507 回答
6

以下应该允许你做你想做的事:

while (my ($k, $v) = each %test_cases) {
    print "TestCase_$k","\n";
    &{"Testcase_$k"}();
}

strict但是,如果正在使用中,这将不起作用。如果您正在使用strict,则需要no strict在 while 循环内部,例如:

while (my ($k, $v) = each %test_cases) {
    no strict 'refs';

    print "TestCase_$k","\n";
    &{"Testcase_$k"}();
}
于 2012-05-21T09:39:33.093 回答