是否有以下相同的内容 -
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语句不在我可以编辑的地方。
答案 0 :(得分:2)
覆盖模具并不是eval的替代品,但这就是我认为你要问的问题,诱捕并将其变成警告,记录模具和恢复/继续程序
$ 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;
答案 1 :(得分:0)
你的意思是这样吗?
my $problems;
for my $r (1 .. 3) {
eval { die "reason $r"; 1 } or $problems .= $@;
}
warn "There were the following problems:\n$problems";