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