相关疑难解决方法(0)

Perl中的异常有什么问题?

另一个问题的讨论让我想知道:Perl缺少其他编程语言的异常系统是什么?

Perl的内置异常有点特别,因为它们像Perl 5对象系统一样,在事后的想法中加以分类,并且它们超出了其他不专门用于异常的关键字(evaldie).

与具有内置try/throw/catch类型语法的语言相比,语法可能有点难看.我通常这样做:

eval { 
    do_something_that_might_barf();
};

if ( my $err = $@ ) { 
    # handle $err here
}
Run Code Online (Sandbox Code Playgroud)

有几个CPAN模块提供语法糖来添加try/catch关键字,并允许轻松声明异常类层次结构等等.

我在Perl的异常系统中看到的主要问题是使用特殊的全局$@来保存当前错误,而不是catch从范围的角度来看可能更安全的专用类型机制,尽管我从来没有亲自遇到任何问题$@得到了.

syntax perl exception-handling exception

29
推荐指数
4
解决办法
4597
查看次数

为什么`$ @`不值得信任?

我似乎记得,相信之后的价值是不安全$@eval.关于信号处理程序$@在你看到它之前有机会设置的东西.我现在也太累了,懒得追查真正的原因.那么,为什么信任不安全$@呢?

perl eval exception race-condition

12
推荐指数
3
解决办法
1055
查看次数

如果在它使用的模块中抛出异常,我怎么能阻止我的perl脚本终止?

我有一个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自己?

我敢肯定这是一个常见的情况,可能是一些简单的事情,但我之前没有遇到过.

perl exception-handling die

3
推荐指数
2
解决办法
2101
查看次数