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!"; }

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

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

4

1 回答 1

12

这只是一个优先级问题,可以通过不省略花括号来解决。你可以使用

&{ $hash{functionName} }()

或者使用替代语法:

$hash{functionName}->()

在索引之间,->可以省略(但我这里没有省略):

$hash{functionName}()

参考:延迟语法

于 2012-06-20T16:47:48.803 回答