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

Иван Бессарабов ivan на bessarabov.ru
Чт Июл 16 23:32:28 PDT 2009


Привожу результаты работы бенчмака на моей машине:

{{{
Benchmark: running constant, global, local for at least 10 CPU seconds...
  constant: 10 wallclock secs (10.63 usr +  0.01 sys = 10.64 CPU) @
2232.24/s (n=23751)
    global: 11 wallclock secs (10.52 usr +  0.01 sys = 10.53 CPU) @
1669.04/s (n=17575)
     local: 11 wallclock secs (10.57 usr +  0.02 sys = 10.59 CPU) @
1746.46/s (n=18495)
}}}

В примере показано, как красиво будут определятся константы:

{{{
use FLAGS::SET {
                 aaa => 1,
                 bbb => 2,
                 ccc => 3,
};

use FLAGS::SET
  ddd => 4,
  eee => 5,
  fff => 6,
  ;

use FLAGS::SET DEBUG => 1;
}}}


Денис, допиши еще в файл test.pl сразу пример, как выдергивать
константы (лично я не сразу просек, как это делать)

{{{
use FLAGS qw(DEBUG);
print "Debug is on.\n" if DEBUG;
}}}

Я чуть-чуть поигрался с твоим future модулем - мне нравится =) Буду
рад и спольлзовать, когда ты зальешь его на сипан.

16 июля 2009 г. 20:23 пользователь Denis Evdokimov
(evdokimov.denis на gmail.com) написал:
> Предпосылки:
> Основной плюс констант в том, что они подставляется на этапе "компиляции".
> В добавок ко всему, все условия содержащие только константы выкидываются.
> Так
> 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.
> Исходники и пример использования в приложении.
> Всё очень сумбурно, так что жду вопросы и комментарии.
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
bessarabov


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