Круто! Это ж замыкания в другой проекции :)


use feature "state";
sub once {
    state $cnt=1; return unless $cnt-- > 0;
    print "ONCE\n";
}
for (3..5) {
    once($_);
};
once();

Пятница,  7 февраля 2014, 23:47 +04:00 от Andrei Lukovenko <[email protected]>:
>http://perldoc.perl.org/functions/state.html
>
>
>7 февраля 2014 г., 23:27 пользователь Андрей Асякин  < [email protected] > 
>написал:
>>Если не секрет, зачем?) Подумалось про
      твигги, если он, то можно сделать как то так:
>>
>>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 пользователь
          Харпалёв Иван  < [email protected] > написал:
>>>>Доброго времени суток, могучий MoscowPM;
>>>>
>>>>Скажите, есть ли какие-то решения, чтобы кусок кода
                выполнялся ровно один раз? ( за время жизни программы)
>>>>
>>>>например
>>>>
>>>>for (...) {
>>>>       do_once { code to be executed only once };
>>>>       ....
>>>>}
>>>>do_once  { some_more() };
>>>>
>>>>Или как такое посоветуете делать?
>>>>Чтобы по caller определялось, место вызова и куда-то
                запоминалось или ещё как-то?
>>>>
>>>>С уважением
>>>>
>>>>
>>>>--
>>>>Moscow.pm mailing list
>>>>[email protected] |  http://moscow.pm.org
>>>>
>>>
>>>
>>>
>>
>>
>>--
>>Moscow.pm mailing list
>>[email protected] |  http://moscow.pm.org
>>
>
>
>
>-- 
>Best regards, Andrei
>+7-937-847-60-74 -- 
>Moscow.pm mailing list
>[email protected] |  http://moscow.pm.org


-- 
Илья Винокуров
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить