Это разумная проблема, но на самом деле нет затрат на вызов функции.
Давайте сначала посмотрим на постоянную прагму документы
Когда в выражении используется константа, Perl заменяет ее значением во время компиляции, а затем может дополнительно оптимизировать выражение. В частности, любой код в блоке if (CONSTANT) будет оптимизирован, если константа имеет значение false.
То есть вы не платите за вызов функции во время выполнения.
Далее, под Technical Notes
написано
В текущей реализации скалярные константы фактически являются встроенными подпрограммами. Начиная с версии 5.004 Perl, соответствующая скалярная константа вставляется непосредственно вместо некоторых вызовов подпрограммы, тем самым сохраняя издержки вызова подпрограммы. Увидеть
Постоянные функции в perlsub для получения подробной информации о том, как и когда это происходит.
Мы должны принять к сведению фразу " текущая реализация ", но я думаю, можно с уверенностью ожидать, что это не изменится таким образом, что это повлечет за собой штраф за время выполнения.
Пожалуйста, прочитайте оставшуюся часть этого раздела и обязательно посмотрите Предупреждения .
Упомянутые Постоянные функции в perlsub описывает
Функции с прототипом ()
являются потенциальными кандидатами для встраивания. Если результат после оптимизации и сложения констант является скаляром с постоянной или лексической областью, который не имеет других ссылок, он будет использоваться вместо вызовов функций, сделанных без &
. Звонки с использованием &
никогда не являются встроенными. (См. constant.pm для простого определения большинства констант.)
Это подтверждает, что, как правило, все в порядке с точки зрения эффективности.
С другой стороны, обратите внимание, что использование прагмы constant
может вызвать вопросы о том, имеет ли значение использование голых слов в вашем коде (что может быть, а может и не быть).
«Хорошая практика» относится к преимуществам программирования использования константных (только для чтения) объявлений для переменных, которые не должны изменяться. Такая практика обычно существенно улучшает код.