Yes, it is usually caught by the eval { } block which the author of XML::Parser deliberately put there, because the error was expected under certain circumstances and should be ignored. It is part of the design of the module.

You don't need to set the $^S you just want to check whether it is set in your die handler: