[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