Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: die through several evals

by kennethk (Abbot)
on Apr 23, 2013 at 16:42 UTC ( #1030194=note: print w/ replies, xml ) Need Help??


in reply to die through several evals

I can't check $@ or override eval function to propagate die.
Why can't you check $@? This sounds like an artificial constraint. Why can't you simply branch and die if the eval fails, e.g.
local $SIG{ALRM} = sub{die "Timeout hit\n"}; eval { eval { magick_die; }; if ($@ and $@ eq "Timeout hit\n") { die $@; } };

You could also fork and run the alarm in the parent thread. Then it really doesn't matter what the flow in the child is.


#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.


Comment on Re: die through several evals
Download Code
Replies are listed 'Best First'.
Re^2: die through several evals
by nyaapa (Novice) on Apr 24, 2013 at 08:59 UTC
    because i only have a anonymous sub and i don't know if there any evil in it... i cant modify this sub..
      What sort of tasks/side effects are happening in the subroutines? You may be able to solve your issue with a fork, a la:
      use strict; use warnings; if (my $pid = fork) { eval { local $SIG{ALRM} = sub{die "Timeout hit\n"}; alarm 1; wait; alarm 0; 1; } or do { print $@; kill 9, $pid; } } else { magick_die(); exit; } sub magick_die { my $var = 0; for (1 ... 1000000) { $var++ for 1 .. 1000000; } }

      If you need to pass information back and forth, you could serialize over pipes.


      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1030194]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (15)
As of 2015-07-29 18:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (267 votes), past polls