5


Perl では、次のように参照 (または名前) によって関数を呼び出すことができます。

    my $functionName = 'someFunction';
    &$functionName();

    #someFunction defined here:
    sub someFunction { print "Hello World!"; }

私がやろうとしているのは、次のようにハッシュからの値を使用することです:

    my %hash = (
        functionName => 'someFunction',
    );

    &$hash{functionName}();

    #someFunction defined here:
    sub someFunction { print "Hello World!"; }

そして、私が得るエラーは Global symbol "$hash" requires explicit package name です。

私の質問は次のとおりです。中間変数を使用せずにこれを行う正しい方法はありますか?
これに関する助けがあれば大歓迎です!

4

1 に答える 1

12

カーリーを省略しないことで解決できるのは、単なる優先順位の問題です。あなたが使用することができます

&{ $hash{functionName} }()

または、別の構文を使用します。

$hash{functionName}->()

インデックス間と同様に、->は省略できます (ただし、ここでは省略しません)。

$hash{functionName}()

参照:逆参照構文

于 2012-06-20T16:47:48.803 に答える