From: Jeff King Date: Thu, 01 Mar 2018 07:34:58 GMT Subject: Re: [Problem] test_must_fail makes possibly questionable assumptions about exit_code. Message-ID: <20180301073458.GB31079@sigill.intra.peff.net> In-Reply-To: On Wed, Feb 28, 2018 at 05:46:22PM +0100, demerphq wrote: > > You're right. I cut down my example too much and dropped the necessary > > eval magic. Try this: > > > > -- >8 -- > > SIG{__DIE__} = sub { > > CORE::die @_ if $^S || !defined($^S); > > print STDERR "fatal: @_"; > > exit 128; > > }; > > FWIW, this doesn't need to use CORE::die like that unless you have > code that overrides die() or CORE::GLOBAL::die, which would be pretty > unusual. > > die() within $SIG{__DIE__} is special cased not to trigger $SIG{__DIE__} again. > > Of course it doesn't hurt, but it might make a perl hacker do a double > take why you are doing it. Maybe add a comment like > > # using CORE::die to armor against overridden die() Thanks, I agree it should just be "die". I pulled this from an old error-handling pattern I used in some of my scripts (which _does_ override die). I screwed it up when cutting it down the first time, but then I didn't cut enough the second. :) -Peff