A die() occurring within a forked child process will get caught by a containing eval block in the parent.
This is incorrect. I ran your test program and I didn't see anything to idicate that you are correct. Here's the output I saw:
(PID 20379) Beginning transaction #123 at foo.pl line 6. (the child fails) at foo.pl line 13. (PID 20380) Rolling back transaction #123: died in eval with Child pro +cess failure at foo.pl line 14. (the parent does OK) at foo.pl line 10. (PID 20379) Committing transaction #123 at foo.pl line 21.
Clearly the eval{} is catching the die() within the child, not the parent.
However, the general thrust of your post is quite correct: it is very bad for a module to fork() and not document that fact. Debugging a fork gone wrong can be very hard, particularly if you don't know a fork() might have happened!
-sam
In reply to Re: forked die() in eval block has counterintuitive behavior?
by samtregar
in thread forked die() in eval block has counterintuitive behavior?
by rlucas
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |