in reply to Re^2: Need Help With Alarm And Eval
in thread Need Help With Alarm And Eval
removed local and every thing worked perfectly
No, it doesn't. The On function sets the signal handler globally, for ever, even after eval has finished. You want local $SIG{'ALRM'} inside that eval.
The extra subs don't make your code any clearer. I think you should keep alarm and local $SIG{'ALRM'} inside the eval.
You could also consider writing a generic timeout function like this:
# untested sub withTimeout { my ($timeout,$worker,$timeouthandler)=@_; eval { local $SIG{'ALRM'}=sub { die "TIMEOUT" }; alarm($timeout); $worker->(); alarm(0); }; if ($@ and $@=~/TIMEOUT/) { $timeouthandler->(); } }
Alexander
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Need Help With Alarm And Eval
by PerlRocks6345 (Novice) on Dec 07, 2012 at 07:37 UTC | |
by afoken (Chancellor) on Dec 07, 2012 at 15:34 UTC |