如何在一行中将哈希引用转换为perl中的常量



我正在使用Sphinx::Search.

此代码示例是否有更简单的方法来将字符串转换为常量?

use Sphinx::Search;
my $config = {
x => 'SPH_MATCH_EXTENDED2',
};
my $x = $config->{x};
print Sphinx::Search->$x(); # output: 6

我使用了来自如何访问 Perl 中名称包含在变量中的常量?这个例子有效,但是如果我总是使用哈希中的字符串,那么我是否需要将其放入单独的变量中才能以这种方式使用它?

my $x = $config->{x};
print Sphinx::Search->$x(); # output: 6

有没有单行本?

# does not work
print Sphinx::Search->$config->{x}();

您可以创建对该值的引用并立即取消引用它:

Sphinx::Search->${ $config->{x} };

(如果没有参数,则()是可选的(。

我猜SPH_MATCH_EXTENDED2Sphinx::Search导出的常量的名称。问题是这些是作为没有参数的子例程实现的,因此您只能在 Perl 将裸子例程名称理解为调用或显式调用有效(SPH_MATCH_EXTENDED2()(的情况下使用它们

最简单的解决方案是完全避免引用哈希值,就像这样

my $config = { x => SPH_MATCH_EXTENDED2 }

之后,您可以只使用

$config->{x};    # 6

而不是调用伪类方法

最新更新