说我有一些库代码,不完全不同于:
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.是否有可能实现这一目标?
解决方法
用呱呱而不是死.您可以使用启动脚本强制执行回溯
perl -MCarp::Always script
要么
PERL5OPT=-MCarp::Always script