I notice that the exit value is 0
This doesn't make sense. Exception::Class exits using die(). This results in a non-zero exit status, usually 255. (I tested this to be sure.)
To set your own exit status, you can set a __DIE__ handler and supply exit() with whatever value you want: