我注意到Exception.pm和Error.pm似乎没有广泛用于Perl社区。这是由于异常处理的大尺寸eval
?在Perl中处理异常的最佳方式是什么?
此外,Perl程序似乎对异常处理有更宽松的政策。这是否有一个令人信服的理由?
在任何情况下,Perl中用于异常处理的最佳方法是什么?
我注意到Exception.pm和Error.pm似乎没有广泛用于Perl社区。这是由于异常处理的大尺寸eval
?在Perl中处理异常的最佳方式是什么?
此外,Perl程序似乎对异常处理有更宽松的政策。这是否有一个令人信服的理由?
在任何情况下,Perl中用于异常处理的最佳方法是什么?
Perl社区的共识似乎是Try::Tiny是做异常处理的首选方式。您提到的“宽松政策”可能是由于以下因素的组合:
注意,最后一个项目意味着你会看到很多这样的代码:
eval { something() };
if ([email protected]) {
warn "Oh no! [[email protected]]\n";
}
这是异常处理,即使它不使用try/catch语句的语法。尽管如此,它仍然很脆弱,并且会打破一些大多数人都没有想到的微妙边缘情况。 Try :: Tiny和CPAN上的其他异常处理模块是为了更容易正确使用而编写的。
1. C确实有setjmp()
和longjmp()
,它可以用于非常粗糙的异常处理形式。
+1“让它更容易*获得正确“ – 2010-10-23 22:31:21
只是为了澄清原始海报可能会或可能不会遭受的一种常见误解:'eval BLOCK' *不是*'eval STRING',并且不会在运行时编译代码。这只是一个异常处理方法 - 尝试一个有趣的名字和有趣的语义。 – hobbs 2010-10-24 03:12:19
dupe of http://stackoverflow.com/questions/503189/is-object-oriented-exception-handling-in-perl-worth-it http://stackoverflow.com/questions/2165161/whats- broken-about-exceptions-in-perl http://stackoverflow.com/questions/2439966/do-you-use-an-exception-class-in-your-perl-programs-why-or-why-not http://stackoverflow.com/questions/1426501/how-do-i-handle-exceptions-in-a-procedural-language - 我们是否真的需要关于Perl异常处理的另一篇文章? – Ether 2010-10-23 22:19:02
查看我的回答[Is Try :: Tiny仍然推荐用于Perl 5.14或更高版本中的异常处理?](http://stackoverflow.com/a/10374265/2766176) – 2014-12-20 07:19:39