Perl社区的共识似乎是
Try::Tiny
是处理异常的首选方式。
Perl 5.14(这是我使用的版本)seems to solve issues与eval的Try :: Tiny地址。将尝试::小还仍然为我提供任何好处?
解决方法
我的回答是不受欢迎的,但我不认为Perl程序员应该尝试使用Perl中我们称之为“异常”的非常糟糕的概念。这些基本上是侧通道返回值。然而,仍然被迷恋例外的想法,即使有使用全局变量传递状态的所有复杂性,人们仍然试图使它工作。
然而,实际上,人们使用死亡信号失败。有些人会说,你可以死亡与参考和传回错误对象,但你不需要为此死。我们有对象,所以我们应该使用对象的所有权力:
sub some_sub { ... return Result->new( error => 1,description => ... ) if $something_went_wrong; return Result->new( error => 0,... ); } my $result = some_sub( ... ); if( $result->is_error ) { ... };
这不涉及全局变量,远距离操作,限制头痛,或需要特殊特殊。你创建一个小类Result,或者你想要调用它的任何东西,包装你的返回值,所以你有结构化数据,而不是没有标识的单一值。没有更多的想知道什么是返回值的意思。这是一个真正的价值还是失败的征兆?如果返回值被定义或者它是真的返回值是好的吗?你的对象可以告诉你这些东西。并且,你可以使用相同的对象与死。如果你已经使用对象并使用它作为返回值,很少推荐所有额外的东西,你必须做容忍$ @。
我在“Return error objects instead of throwing exceptions”谈到这个
但是,我知道你不能帮助别人做什么,所以你还是要假装Perl有例外。