perl – 如何获取coderef的行号和文件名?

前端之家收集整理的这篇文章主要介绍了perl – 如何获取coderef的行号和文件名?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说我有一些库代码,不完全不同于:

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

猜你在找的Perl相关文章