in reply to Want END block to run except when usage()/--help invocation
I suggest you trap the exception ("die" ...) with an eval { } block within your code, maybe in an outer level subroutine that simply calls an inner sub to do the actual work. I would not rely on the END-block per se.