Normally your code returns 0 on failure. But when you're debugging, you want to bomb out:
$DEBUG_LEVEL = 1; $DEBUG = $DEBUG_LEVEL ? sub {croak "$! $@";} : sub { 0; }; sub foo { do_something; if ($argh) {return &$DEBUG} return 1; }