LINUX.ORG.RU

История изменений

Исправление DRVTiny, (текущая версия) :

По-моему паттерн не такой уж и сложный

sub {
 state $first_run=0;
 on->('event' => __SUB__) unless $first_run++;
 do_something();
}->()
Зато не нужно никаких передач коллбеков: замыкание само себя добавляет в планировщик. Проблема может быть разве что с переполнением счётчика. Тогда я бы предложил делать так:

sub {
 state $first_run;
 on->('event' => __SUB__) unless ($first_run+0)==($first_run|=1);
 do_something();
}

Исходная версия DRVTiny, :

По-моему паттерн не такой уж и сложный

sub {
 state $first_run=0;
 on->('event' => __SUB__) unless $first_run++;
 do_something();
}->()
Зато не нужно никаких передач коллбеков: замыкание само себя добавляет в планировщик. Проблема может быть разве что с переполнением счётчика. Тогда я бы предложил делать так:

sub {
 state $first_run;
 on->('event' => __SUB__) unless ($first_run+0)==($first_run|=1);
 do_something();
}