У меня есть набор констант, объявленных в Perl:
use constant C1 => 111;
use constant C2 => 222;
..
use constant C9 => 999;
my $which_constant = "C2";
Как мне создать выражение Perl, которое на основе $which_constant
получает значение константы, названной со значением этой переменной - например. "222".
Обратите внимание, что я не могу изменить ни одно из условий выше — они являются упрощением реального сценария: у меня есть модуль (над которым я не контролирую), из которого импортируются эти константы. Имя одной из констант вводится пользователем из командной строки. Мне нужно получить доступ к соответствующему значению константы.
Я бился головой о стену (в основном вокруг всевозможных странных конструкций глобусов), но ни один из них не работает.
P.S. Если решение обращается к константам внутри своего собственного модуля - скажем, My::Constants::C2
(без необходимости их импорта), даже лучше, но не обязательно - я могу легко импортировать правильные константы в main::
, используя My::Constants->import($which_constant)
. и да, в довершение всего, константы НЕ экспортируются по умолчанию, поэтому требуется явный вызов import().
Некоторые из вещей, которые я пробовал:
main::$which_constant
- синтаксическая ошибкаmain::${which_constant}
- синтаксическая ошибка${*$which_constant}
- возвращает пустое значение*$which_constant
- возвращает "*main::C2"${*${*which_constant}}
- пусто