Perl:使用哈希值通过引用调用子例程的问题

Thu*_*per 5 perl hash reference subroutine callbyname


在Perl中,您可以通过引用(或名称)调用函数,如下所示:

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

    #someFunction defined here:
    sub someFunction { print "Hello World!"; }
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用哈希值,如下所示:

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

    &$hash{functionName}();

    #someFunction defined here:
    sub someFunction { print "Hello World!"; }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是全局符号"$ hash"需要显式包名.

我的问题是:没有使用中间变量有没有正确的方法来做到这一点?
任何有关这方面的帮助将不胜感激!

ike*_*ami 12

这只是一个优先问题,可以通过不省略curlies来解决.你可以用

&{ $hash{functionName} }()
Run Code Online (Sandbox Code Playgroud)

或者使用替代语法:

$hash{functionName}->()
Run Code Online (Sandbox Code Playgroud)

在索引之间,->可以省略(但我不在此省略):

$hash{functionName}()
Run Code Online (Sandbox Code Playgroud)

参考:引用语法

  • 这根本不是真的.`$ ref - >(@ args)`完美排列.但是,&$ ref`(但不是`&$ ref()`)非常特别.它重用父母的`@ _`,这是你通常想要避免的.使用` - >()`的另一个原因.:) (2认同)