У вас могут возникнуть проблемы, если вы используете константы в контексте, который автоматически цитирует открытые слова (как это верно для любого вызова подпрограммы). Например, вы не можете сказать $hash{CONSTANT}, потому что CONSTANT будет интерпретироваться как строка. Используйте $hash{CONSTANT()} или $hash{+CONSTANT}, чтобы предотвратить запуск механизма цитирования с помощью слова. Аналогичным образом, поскольку оператор => сразу приводит в действие одно слово слева от него, вы должны сказать CONSTANT() => 'value' (или просто использовать запятую вместо большая стрелка) вместо CONSTANT => 'value'.
Ответ 2
На основе ответа Дениса ИбаеваB:: Deparse может показать, как код анализируется и без использования +:
perl -MO=Deparse,-p script.pl
С +:
use constant ('ANIMAL', 'rabbit');
if ($$self{+'rabbit'}) {
();
}
script.pl syntax OK
Без +:
use constant ('ANIMAL', 'rabbit');
if ($$self{'ANIMAL'}) {
();
}
script.pl syntax OK
Обратите внимание, что + вызывает использование constant, где используется только слово ANIMAL без +.