[Moscow.pm] do_once { CODE };
Konstantin S. Uvarin
khedin на gmail.com
Сб Фев 8 01:05:57 PST 2014
Приветствую.
Нашёл.
use warnings;
use strict;
package Once;
use Exporter;
BEGIN {
our @ISA = qw/Exporter/;
our @EXPORT = qw/once/;
};
my %seen;
sub once (&) {
my $sub = shift;
$seen{$sub}++ or $sub->();
return; # always execute in void context
};
1;
On Fri, 2014-02-07 at 18:40 +0200, Konstantin S. Uvarin wrote:
> Приветствую.
>
>
> На CPAN есть модуль https://metacpan.org/pod/once
>
>
> Как я понял, он базируется на caller-е. ИМХО более правильное решение
> - использовать CODEREF, чтобы не привязываться к строке. Я писал свою
> реализацию - могу поделиться, если найду.
>
>
>
> 2014-02-07 18:19 GMT+02:00 Харпалёв Иван <ivan.kharpalev at gmail.com>:
> Доброго времени суток, могучий MoscowPM;
>
>
> Скажите, есть ли какие-то решения, чтобы кусок кода выполнялся
> ровно один раз? ( за время жизни программы)
>
>
> например
>
>
> for (...) {
> do_once { code to be executed only once };
> ....
> }
> do_once { some_more() };
>
>
> Или как такое посоветуете делать?
> Чтобы по caller определялось, место вызова и куда-то
> запоминалось или ещё как-то?
>
>
> С уважением
>
>
>
> --
> Moscow.pm mailing list
> moscow-pm at pm.org | http://moscow.pm.org
>
>
>
Подробная информация о списке рассылки Moscow-pm