[Moscow.pm] do_once { CODE };
Андрей Фёдоров
secrethost на gmail.com
Пт Фев 7 09:43:22 PST 2014
Сходу придумалось вот такое:
for (1..5) {
unless (state $done++) {
say "once";
}
say;
}
Наверняка можно столкнуться с условиями, в которых работать не будет. Как
минимум для каждой копии анонимной функции создаётся своя переменная:
sub make {
unless (state $done++) {
# once
say "init make";
}
return sub {
# а тут уже не работает, в каждой sub { ... } своя копия $done
unless (state $done++) {
say "make";
}
}
}
make->();
make->();
make->();
say '---';
my $ref = make();
$ref->();
$ref->();
$ref->();
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
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20140207/caf2ed6b/attachment-0001.html>
Подробная информация о списке рассылки Moscow-pm