sub foo { local $SIG{__WARN__} = sub { say "warning passiert, breche ab. @_"; die '__INTERNAL_WARNING__'; }; warn 'Das ist ein Test'; say 'Ein Text, der nie kommt'; } eval { foo(); }; if ($@ and $@ !~ /^__INTERNAL_WARNING__/) { die $@; } warn 'Warning ausserhalb'; say 'Ganz zum Schluss';