You may not be familiar with other languages like C++ or Java. However, in the off-chance that you are (or someone else reading this thread):
die is to throw as eval { ... } is to try { ... }
After an eval block, you can inspect $@ to see if the task died. As others have mentioned, $SIG{__DIE__} is only for putting in a hook for the last gasp of the process, when the die had no other eval blocks to catch it. By that point, there's no "saving" the process.