Jos*_*osh 3 perl exception-handling die
我有一个perl脚本,使用标准的net :: HTTP代码和perl 5.8.8.我遇到了一个错误情况,当我调用时服务器返回0字节的数据:
$_http_connection->read_response_headers;
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的perl脚本die,因为Net :: HTTP :: Methods模块在第306行有一个"die":
Server closed connection without sending any data back at
/usr/lib/perl5/vendor_perl/5.8.8/Net/HTTP/Methods.pm line 306
Run Code Online (Sandbox Code Playgroud)
当然,第305-307行是:
unless (defined $status) {
die "Server closed connection without sending any data back";
}
Run Code Online (Sandbox Code Playgroud)
如何让我的脚本"从这种情况中优雅地恢复",检测die并随后进入我自己的错误处理代码,而不是die自己?
我敢肯定这是一个常见的情况,可能是一些简单的事情,但我之前没有遇到过.
Sin*_*nür 12
使用eval来捕获异常有时可能会出现问题,尤其是在5.14之前.你可以使用Try :: Tiny.
npo*_*cop 11
您可以eval { }用来捕获die()异常.使用$@检查抛出值:
eval {
die "foo";
};
print "the block died with $@" if $@;
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参见http://perldoc.perl.org/functions/eval.html.