[Moscow.pm] Ограничить время выполнения произвольной функции

Mons Anderson mons на cpan.org
Пт Янв 29 05:48:34 PST 2010


On Friday 29 January 2010 16:38:12 Dmitry E. Oboukhov wrote:
> Хехе :) вот Ромка рядом сидит может подтвердить. мы с утра первое что
> попробовали это goto :)
>
> реально goto заменит саму sub что в SIG{ALRM} на то что мы вызовем, а
> там нам надо делать что? return или die.
> стек в этой функции показывает на прерванный eval.
>
> ретурн - вернет в eval
> die - будет пойман eval'ом
>
> а вернуть управление надо в вызвавшую нас функцию.
> то есть goto "удаляет" упоминание о функции SIGALRM, то есть удаляет 1
> вызов с вершины стека, а удалить надо еще несколько функций

можно использовать "плохой" goto ;)

perl -E 'sub foo { eval "sleep 10" } { local $SIG{ALRM} = sub { goto EXIT; }; 
alarm 1; foo(); EXIT: alarm 0; say "exited" }'



-- 
Mons Anderson aka Vladimir Perepelitsa
<mons на cpan.org> / #99779956 / quanth на irc.freenode.net


Подробная информация о списке рассылки Moscow-pm