perl - block 评估的替代方案?

标签 perl try-catch eval die

是否存在与以下内容等效的内容 -

eval { die "reason 1"; }; warn $@ if $@;
eval { die "reason 2"; }; warn $@ if $@;
eval { die "reason 3"; }; warn $@ if $@;
.
.

正如您所注意到的,以下代码不会打印出脚本终止的所有可能原因..

eval {
    die "reason 1";
    die "reason 2";
    die "reason 3";
};
warn $@ if $@;

[编辑]我想知道脚本(使用很多库)失败的所有可能原因。 die 语句不在我可以编辑的地方。

最佳答案

重写 die 并不完全是 eval 的替代方案,但这就是我认为您要问的问题,捕获 die 并将其变成警告,记录 die 并恢复/继续程序

$ perl -e " eval{die 1;}; die 2; die 3; "
2 at -e line 1.

$ perl -Mwarnerous  -e " eval{die 1;}; die 2; die 3; "
FAKE die : 2 at -e line 1
FAKE die : 3 at -e line 1

$ cat warnerous.pm
*CORE::GLOBAL::die = sub {
    unless( $^S ){
        warn( qq{FAKE die : @_ @{[sprintf q{at %s line %s },(caller)[1,2] ]}\n} );
    }
};
1;

关于perl - block 评估的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300045/

相关文章:

Perl 按模式匹配对数组进行排序

java - 尝试使用资源为什么不能修改资源

string - 阻止 R 解析 ~ 到用户的主目录

python - python 条件 (if) 语句是否有最大长度?

Java:如何在 try catch 体内向方法调用者抛出异常?

r - 如何使用 ddply 以编程方式汇总多列?

macos - 在 OS X 上部署独立的 GUI Perl 应用程序

perl - 将哈希数组转换为 json

perl - 如何将强制和可选命令行参数传递给 perl 脚本?

java - 即使在运行时抛出异常,据说也不会抛出异常