enn*_*ler 28 error-handling perl exception-handling eval
我注意到Exception.pm和Error.pm似乎没有在Perl社区中广泛使用.这是因为eval异常处理的占地面积很大吗?  
此外,Perl程序似乎对一般的异常处理有一个更宽松的政策.这是否有令人信服的理由?
无论如何,Perl中最好的异常处理方法是什么?
Mic*_*man 51
Perl社区的共识似乎是Try :: Tiny是进行异常处理的首选方式.您所指的"宽松政策"可能是由以下因素组合而成:
请注意,最后一项意味着你会看到很多像这样的代码:
eval { something() };
if ($@) {
    warn "Oh no! [$@]\n";
}
这是异常处理,即使它不使用try/catch语法.尽管如此,它仍然很脆弱,并会打破一些大多数人都没有想到的微妙优势.尝试:: Tiny和CPAN上的其他异常处理模块,以便更容易正确.
1.Ç确实有setjmp()和longjmp(),其可用于异常处理的非常粗的形式.
小智 8
切勿按原样测试 $@,因为它是一个全局变量,因此即使测试本身也可以更改它。
通用评估模板:
my $result;
eval {
    $result= something();
    # ...
    1;  # ok
} or do {
    my $eval_error= $@ || "error";
    # ...
    die $eval_error;
};  # needs a semicolon
实际上,这是最简单的方法。它仍然为有趣的 $@ 行为留下了很小的空间,但没有什么真正让我担心的。
| 归档时间: | 
 | 
| 查看次数: | 26791 次 | 
| 最近记录: |