Как преобразовать хэш в одной строке в константу в perl - PullRequest
0 голосов
/ 21 сентября 2018

Я использую 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}();

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Я предполагаю, что SPH_MATCH_EXTENDED2 - это имя константы, которая экспортируется Sphinx::Search.Проблема заключается в том, что они реализованы в виде подпрограммы без параметров, поэтому вы можете использовать их только в том случае, если Perl воспринимает пустое имя подпрограммы как вызов или когда допустим явный вызов (SPH_MATCH_EXTENDED2())

Самое простое решение состоит в том, чтобы вообще не заключать в кавычки значение хэш-значения, например

my $config = { x => SPH_MATCH_EXTENDED2 }

, и после этого вы можете использовать просто

$config->{x};    # 6

вместо вызова метода псевдокласса

0 голосов
/ 21 сентября 2018

Вы можете создать ссылку на значение и сразу же разыменовать его:

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

(Если аргументов нет, () является необязательным).

...