Предпосылки:<br>Основной плюс констант в том, что они подставляется на этапе "компиляции".<br>В добавок ко всему, все условия содержащие только константы выкидываются.<br>Так<br>if(1)<br>{<br> print "text";<br>
}<br>преобразуется в<br>print "text";<br>
<br>А <br>if(0)<br>
{<br>
print "text";<br>
}<br>просто выбросится.<br><br><br>
В подтверждение этих слов:<br><br>
use Benchmark qw(:all);<br>
<br>
use constant DEBUG => 0;<br>
our $DEBUG_global = 0;<br>
my $DEBUG_local = 0;<br>
my $test = {<br>
constant => sub {<br>
for ( 0 .. 10000 )<br>
{<br>
if (DEBUG)<br>
{<br>
warn "DEBUG";<br>
}<br>
}<br>
},<br>
global => sub {<br>
for ( 0 .. 10000 )<br>
{<br>
if ($DEBUG_global)<br>
{<br>
warn "DEBUG";<br>
}<br>
}<br>
},<br>
local => sub {<br>
for ( 0 .. 10000 )<br>
{<br>
if ($DEBUG_local)<br>
{<br>
warn "DEBUG";<br>
}<br>
}<br>
},<br>
};<br>
<br>
timethese(-10, $test);<br>
<br>
<br><br>Зная об этом поведении я пользовался следующим хаком<br>В начале программы писал<br>use constant DEBUG => 0;<br>
а в подключаемых модулях писал<br>if(main::DEBUG)<br>{<br><br>}<br>Но... <br>1. Это не красиво<br>2. Обязывает прописывать все константы<br><br><br>Вот я и решил избавиться от этих проблем.<br>Предположительное название модуля FLAGS.<br>
Исходники и пример использования в приложении.<br>
Всё очень сумбурно, так что жду вопросы и комментарии.<br>
<br>