Подытожу - можно использовать замыкание:
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 от Андрей Асякин<[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
--
Илья Винокуров
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org