[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