in reply to Complex and reliable signal handling.

perldiag gives a hint:
panic: fold_constants JMPENV_PUSH returned %d
(P) While attempting folding constants an exception other than an "eval" failure was caught.

I guess that your entire program is a bit more complex than the bits you posted.
Perhaps a $SIG{__DIE__} handler would reveal more:

use Carp(); $SIG{__DIE__} = \&Carp::confess;

Replies are listed 'Best First'.
Re^2: Complex and reliable signal handling.
by vsespb (Chaplain) on May 31, 2013 at 19:30 UTC
    I guess that your entire program is a bit more complex than the bits you posted.
    yes, treat it as pseudocode. I can't create proof-of-concept code.
    Perhaps a $SIG{__DIE__} handler would reveal more:
    Yes, yo're right. fold_constants mostly happens, when child terminated with exception. However. All 'die's are inside eval (you can see eval in pseudocode). After eval caught, program executes dump_error() and exits (this way I see all errors) Also I did not see the panic, until I installed signal handlers into "children" code above.
Re^2: Complex and reliable signal handling.
by vsespb (Chaplain) on May 31, 2013 at 19:39 UTC
    I tried $SIG{__DIE__} = \&Carp::confess; It prints nothing. Perhaps because it prints errors only outside eval?

    I don't have own DIE handlers (but LWP, which I use, do, however it should localize it).

    Also, I remember now, most (but not all) lines code lines mentioned in panic message contained eval (or 'require' which calls eval, or even eval{require}).