in reply to croak() does not "die" when DESTROY is used

I've figured out that the destructor mangles $@
Right. eval {} does two things: first, it catches exceptions and places them in $@, and second (and often overlooked) it clears $@ if there were no exceptions. So the do_something method was setting $@ and bailing out of the main eval {}, but as part of that bail out, $page was destroyed, and the destructor's eval {} was clearing the just-set $@.
  • Comment on Re: croak() does not "die" when DESTROY is used