我和Can't disable stack trace in Carp::croak() for some reason有同样的问题。因为堆栈中的每个调用都被认为是“安全的”,所以croak()每次都会打印出完整的堆栈跟踪。我想对某些电话禁用该功能。

这是一个例子:

use Carp;

sub this_may_fail {
  # Some code...
  croak "This call failed!";
}

sub regular_code {
  this_may_fail();
}

regular_code();

这两个子例程位于同一程序包中,因此this_may_fail会自动标记为安全。有什么办法告诉鲤鱼this_may_fail应该被认为是不安全的?

最佳答案

regular_code认为this_may_fail是“安全的”。该检查基于 namespace ,因此为了使其不安全,您需要将this_may_fail放置在其他 namespace 中。

或编写自己的黄花鱼。

perl -e'
   use Carp qw( );
   sub untrusting_croak {
      goto &Carp::croak if $Carp::Verbose;
      my @caller = caller(1);
      die(join("", @_)." at $caller[1] line $caller[2]\n");
   }

   sub f { untrusting_croak("!!!"); }    # Line 9

   f();                                  # Line 11
'
!!! at -e line 11

关于perl - 如何用Carp将调用标记为 "unsafe"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21860407/

10-12 16:19