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を呼び出したいのですが、次のエラーが発生します。

./main.pl行17で、パッケージ「CheckStatus」を介してオブジェクトメソッド「Testcase_」を見つけることができません(おそらく「CheckStatus」をロードするのを忘れましたか?)

この問題を修正するにはどうすればよいですか?同じことをする別の方法はありますか?

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。使用している場合は、whileループの内側strictが必要になります。例:no strict

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

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