Я пытаюсь определить константы в Perl, используя прагму constant
:
use constant {
FOO => "bar",
BAR => "foo"
};
У меня возникли проблемы, и я надеюсь, что есть стандартный способ их обработки.
Прежде всего ...
Я определяю скрипт подключения для Subversion.Чтобы упростить задачу, я хочу иметь один файл, в котором используемый класс (пакет) находится в том же файле, что и мой настоящий сценарий.
Большинство этого пакета будут содержать константы:
print "This is my program";
package MyClass;
use constant {
FOO => "bar"
};
sub new { ... }
Я бы хотел, чтобы моя константа FOO
была доступна для моей основной программы.Я хотел бы сделать это, не называя его MyClass::FOO
.Обычно, когда пакет представляет собой отдельный файл, я могу сделать это в своей основной программе:
use MyClass qw(FOO);
, но, поскольку мой класс и программа представляют собой один файл, я не могу этого сделать.Каков наилучший способ для моей основной программы получить доступ к моим константам, определенным в моем классе?
Вторая проблема ...
Я хотел бы использовать значения констант в качестве хэшаkeys:
$myHash{FOO} = "bar";
Проблема в том, что %myHash
имеет буквенную строку FOO
в качестве ключа, а не значение константы.Это вызывает проблемы, когда я делаю что-то вроде этого:
if (defined $myHash{FOO}) {
print "Key " . FOO . " does exist!\n";
}
Я мог бы вызвать контекст:
if (defined $myHash{"" . FOO . ""}) {
Я мог бы добавить круглые скобки:
if (defined $myHash{FOO()}) {
Или,Я мог бы использовать временную переменную:
my $foo = FOO;
if (defined $myHash{$foo}) {
Ни один из действительно хороших способов решения этой проблемы.Итак, как лучше?Есть ли один способ, который я пропускаю?
Кстати, я не хочу использовать Readonly::Scalar
, потому что это 1).медленно и 2).не входит в стандартный пакет Perl.Я хочу определить мой хук, чтобы он не требовал дополнительных пакетов Perl и чтобы он работал как можно проще.