use warnings FATAL => qw(all); eval { open(CMD, "_bad_exe_ a b c|") or die "does not happen" }; die "die \$\@ ERROR: $@\n"; while(){} __END__ die $@ ERROR: Can't exec "_bad_exe_": No such file or directory at ... line x. die $@ ERROR: