我有一个用 Perl 编写的 SOAP 客户端,它使用LWP
包进行 HTTPS 传输和XML::Simple
解析 XML 有效负载。有时调用XMLin
失败并出现 die() 然后我的脚本死掉了,并且必须由我编写的监控程序重新启动以检测这一点。这真的是不可取的,所以我想知道 Perl 是否有像 C++ 异常处理机制这样的工具,我可以在其中捕获 die 消息,忽略它报告错误并让我的脚本继续,就像发生错误一样?我已经阅读了许多 Perl 书籍并寻找了这个,但我没有设法找到一些东西。这正在扼杀我的应用程序,但我不想编写自己的 XML 解析代码,除非我必须这样做。
问问题
517 次
2 回答
7
是的; 这样做的基本机制是eval
:
sub a { die "BAD"; }
eval { a(); }
print "Survived an exception $@";
但是,您应该使用更高级的构造(仍然在此之上构造)是有原因的,例如Try::Tiny等。(请参阅其文档底部的链接)。
于 2012-07-03T18:47:36.463 回答
-2
您可以捕捉“死”,但不能通过捕捉它来阻止脚本死亡: *当“__DIE__”钩子例程返回时,异常处理将继续进行,就像没有钩子时一样,除非钩子例程本身通过“goto”、循环退出或“die()”退出。*
不过,您可以运行容易在 eval{} 块内调用 die() 的例程。
于 2012-07-03T19:22:15.400 回答