in reply to Preforking using share mem

This is a classic case of dealing with signals in eval. This code is dealing with a SIGHUP being sent at any time which will terminate the loop (not to terminate the child process). If SIGHUP is sent during the loop, but not during the eval, then the first handler will handle the signal and set $done to 1.

However, if a SIGHUP was sent during the eval without the second signal handler, the SIGHUP would not cause the eval to die, which presumably would cause some problem.

I'm not sure this is a very good way of coding this. There appears to be a race condition, where if the signal is received at the beginning of the eval before the first line of code, the new signal handler is never used. I'd have to see the rest of the code and freshen myself on signal handling to know how to improve the code to avoid the race condition.