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

时间:2012-06-20 16:44:12

标签: perl hash reference subroutine callbyname


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

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

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

我想要做的是使用Hash中的值,如下所示:

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

    &$hash{functionName}();

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

我得到的错误是全局符号“$ hash”需要显式包名。

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

1 个答案:

答案 0 :(得分:12)

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

&{ $hash{functionName} }()

或使用替代语法:

$hash{functionName}->()

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

$hash{functionName}()

参考:Deferencing Syntax