[Moscow.pm] Решил опубликовать модуль.

Denis Evdokimov evdokimov.denis на gmail.com
Чт Июл 16 09:23:54 PDT 2009


Предпосылки:
Основной плюс констант в том, что они подставляется на этапе "компиляции".
В добавок ко всему, все условия содержащие только константы выкидываются.
Так
if(1)
{
    print "text";
}
преобразуется в
print "text";

А
if(0)
{
    print "text";
}
просто выбросится.


В подтверждение этих слов:

use Benchmark qw(:all);

use constant DEBUG => 0;
our $DEBUG_global = 0;
my $DEBUG_local = 0;
my $test = {
    constant => sub {
        for ( 0 .. 10000 )
        {
            if (DEBUG)
            {
                warn "DEBUG";
            }
        }
    },
    global => sub {
        for ( 0 .. 10000 )
        {
            if ($DEBUG_global)
            {
                warn "DEBUG";
            }
        }
    },
    local => sub {
        for ( 0 .. 10000 )
        {
            if ($DEBUG_local)
            {
                warn "DEBUG";
            }
        }
    },
};

timethese(-10, $test);



Зная об этом поведении я пользовался следующим хаком
В начале программы писал
use constant DEBUG => 0;
а в подключаемых модулях писал
if(main::DEBUG)
{

}
Но...
1. Это не красиво
2. Обязывает прописывать все константы


Вот я и решил избавиться от этих проблем.
Предположительное название модуля FLAGS.
Исходники и пример использования в приложении.
Всё очень сумбурно, так что жду вопросы и комментарии.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20090716/f390f26f/attachment.html>
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: Flags.zip
Type: application/zip
Size: 1564 bytes
Desc: отсутствует
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20090716/f390f26f/attachment.zip>


Подробная информация о списке рассылки Moscow-pm