Thats a good idea, I will use it in the future.
It doesn't solve my problem because the DIE handler still wont know if it was called within eval or not.
I think you'll have to pass that state to yourself via a global. How about something like $^S_FOR_REAL_AND_FOR_TRUE? You'd set it to something true prior to entering eval-string and clear it afterwards. You can inspect that during $SIG{__DIE__}.