加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Perl库中解决一个’die’调用,我不能修改?

发布时间:2020-12-15 21:23:48 所属栏目:大数据 来源:网络整理
导读:是的,问题是我使用的库,而不,我不能修改它。我需要一个解决方法。 基本上,我处理一个写得不好的Perl库,当遇到读取文件的特定错误条件时退出。我从一个程序调用这个例程,该程序循环通过成千上万的文件,其中一些是坏的。坏文件发生;我只是想让我的例程
是的,问题是我使用的库,而不,我不能修改它。我需要一个解决方法。

基本上,我处理一个写得不好的Perl库,当遇到读取文件的特定错误条件时退出。我从一个程序调用这个例程,该程序循环通过成千上万的文件,其中一些是坏的。坏文件发生;我只是想让我的例程记录错误,继续前进。

如果我可以修改库,我只是改变

die "error";

到a

print "error";return;

, 但是我不能。有什么办法,我可以沙发程序,以便坏文件不会崩溃整个过程?

FOLLOWUP QUESTION:使用一个“eval”沙发碰撞倾向的调用工作很好,但如何设置处理可捕获错误在该框架内?来描述:

我有一个子程序调用库 – 这 – 崩溃 – 有时多次。而不是在这个子程序中用eval {}来调用每个调用,我只是允许它死掉,并在调用我的子程序的级别上使用eval {}:

my $status=eval{function($param);};
unless($status){print $@; next;}; # print error and go to next file if function() fails

但是,有一些错误条件,我可以,并捕获在function()。什么是最适当/优雅的方式来设计在子程序和调用例程中的错误捕获,以便我获得捕获和未捕获错误的正确行为?

解决方法

你可以把它包装在一个eval。看到:
perldoc -f eval

例如,你可以写:

# warn if routine calls die
eval { routine_might_die }; warn $@ if $@;

这将把致命错误转变成一个警告,这或多或少是你建议的。如果调用,$ @包含传递给它的字符串。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读