_push_timeout_stack(); local $SIG{USR1} = sub { _raise_alarm }; local $SIG{ALRM} = sub { _calc_evals_count_to_die(); _raise_alarm(); }; alarm($time); eval { $work->() }; _pop_timeout_stack();