У меня есть набор констант, объявленных в Perl:Как получить доступ к константе в 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}}
- пустая
Если вам когда-либо понадобится изменить этот модуль, http://search.cpan.org/perldoc?Readonly или http://search.cpan.org/perldoc?Attribute::Constant, похоже, намного лучше подходит для этого использования. – ephemient
Модуль находится под контролем (для меня более точным, автоматически создается вне базы данных БД, содержащей список констант) команды разработчиков программного обеспечения. У них нет пропускной способности, чтобы беспокоиться о чем-то маленьком/тривиальном, и не позволят кому-то извне работать с кодом без серьезного бизнеса, чтобы оправдать риск изменения. Их перерывы при работе в крупном финансовом учреждении. – DVK