В целях обучения я собираюсь с идеей создания управляемые событиями в Perl, и заметил, что было бы неплохо, если бы подпрограмма, которая была зарегистрирована в качестве обработчика событий, может, при сбое, просто назначьте другой вызов самому себе на более поздний срок. До сих пор у меня есть придумайте что-то вроде этого:
my $cb;
my $try = 3;
$cb = sub {
my $rc = do_stuff();
if (!$rc && --$try) {
schedule_event($cb, 10); # schedule $cb to be called in 10 seconds
} else {
do_other_stuff;
}
};
schedule_event($cb, 0); # schedule initial call to $cb to be performed ASAP
Есть ли способ, чтобы код внутри суб-канала мог получить доступ к coderef к этому sub, чтобы я мог обойтись без использования дополнительной переменной? Я бы хотел назначьте начальный вызов следующим образом.
schedule_event( sub { ... }, 0);
Сначала я подумал об использовании caller(0)[3]
, но это только дает мне
имя функции, (__ANON__
если нет имени), а не ссылку на код
к которому прикреплен блокнот.