[Moscow.pm] do_once { CODE };

Илья Винокуров ilvin на mail.ru
Пт Фев 7 11:47:41 PST 2014


 Подытожу - можно использовать замыкание:

sub make_once {
    my ($sub) = @_;
    my $cnt = 0;
    sub { goto $sub unless $cnt++ }
}
# Как использовать:
*{once} = make_once(sub{ print "ONCE: @_\n" });
for (3..10) {
    once($_);
};
once();


Пятница,  7 февраля 2014, 23:27 +04:00 от Андрей Асякин<asan999 на gmail.com>:
>Если не секрет, зачем?) Подумалось про
      твигги, если он, то можно сделать как то так:
>
>use common::sense;
>
>sub init {
>    say 42;
>}
>
>sub app {
>    init();
>    eval q|
>        sub app {
>            say "[500, [], [$_[0]]]";
>        }
>    |;
>    die $@ if $@;
>
>    &app;
>};
>
>app($_) for (1..3);
>
>>
>>
>>7 февраля 2014 г., 20:19 пользователь
          Харпалёв Иван  < ivan.kharpalev на gmail.com > написал:
>>>Доброго времени суток, могучий MoscowPM;
>>>
>>>Скажите, есть ли какие-то решения, чтобы кусок кода
                выполнялся ровно один раз? ( за время жизни программы)
>>>
>>>например
>>>
>>>for (...) {
>>>       do_once { code to be executed only once };
>>>       ....
>>>}
>>>do_once  { some_more() };
>>>
>>>Или как такое посоветуете делать?
>>>Чтобы по caller определялось, место вызова и куда-то
                запоминалось или ещё как-то?
>>>
>>>С уважением
>>>
>>>
>>>--
>>>Moscow.pm mailing list
>>>moscow-pm на pm.org |  http://moscow.pm.org
>>>
>>
>>
>>
>
>-- 
>Moscow.pm mailing list
>moscow-pm на pm.org |  http://moscow.pm.org


-- 
Илья Винокуров
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20140207/d3ddc2b4/attachment-0001.html>


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