our $override_exit = 0; BEGIN { *CORE::GLOBAL::exit = sub(;$) { no warnings qw( exiting ); last EXIT_OVERRIDE if $override_exit; CORE::exit($_[0] // 0); }; } sub myeval { my $exit_was_called = 1; EXIT_OVERRIDE: { local $override_exit = 1; eval($_[0]); die $@ if $@; $exit_was_called = 0; } die("Exit called\n") if $exit_was_called; }