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
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
|
---|
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 |
In Section
Seekers of Perl Wisdom