说我有一些库代码,与此完全不同:
sub try_hard {
my $sub = shift;
my $tries = 3;
my @failures;
while($tries--) {
eval {
my $success = $sub->(@_) or die "sub returned false value";
1;
} or do {
push @failures, $@;
}
}
die "try_hard: failed 3 times: $failures[-1]"
}
这可能会失败:
try_hard: failed 3 times: sub returned false value at BadUtils.pm line 7
...如果您在多个地方拨打try_hard
并且您不知道哪个呼叫是软故障的呼叫,则无效。
如果我能得到$sub
的来源,我可以将其改为:
my $success = $sub->(@_) or die "sub returned false value at $file line $lineno
";
并且库将略微DWIMmer。是否有可能实现这一目标?
答案 0 :(得分:3)
使用croak
代替die
。您可以使用
perl -MCarp::Always script
或
PERL5OPT=-MCarp::Always script
答案 1 :(得分:2)