Ensure all exceptions are objects 

local $SIG{__DIE__} = sub {
   my $err = shift;
   if(UNIVERSAL::isa($err, 'Exception::Class')) {
     die $err; # re-throw
   }
   else {
     # Otherwise construct a MyException with $err as a string
     die MyException::Default->throw(message => "$err");
   }
};