use strict; use warnings; use Test::More (tests => 2); my $exit_callback = sub {}; BEGIN { *CORE::GLOBAL::exit = sub { $exit_callback->(@_) }; } sub exit_ok(&$) { my ($code, $message) = @_; my $exit_called = 0; $exit_callback = sub { $exit_called = 1}; $code->(); is($exit_called, 1, $message); } sub noexit_ok(&$) { my ($code, $message) = @_; my $exit_called = 0; $exit_callback = sub { $exit_called = 1}; $code->(); is($exit_called, 0, $message); } exit_ok { exit } "exit called"; noexit_ok { } "exit not called";