in reply to Getting around $? setting in END blocks
In addition to the solutions already offered, if you don't care whether the END blocks run there is always POSIX::_exit.