如何用Carp将呼叫标记为"不安全"?

Jon*_*han 6 perl carp

我有同样的问题,因为某些原因无法在Carp :: croak()中禁用堆栈跟踪.因为堆栈中的每个调用都被认为是"安全的",所以每次croak()打印出完整的堆栈跟踪.我想为某些电话禁用它.

这是一个例子:

use Carp;

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

sub regular_code {
  this_may_fail();
}

regular_code();
Run Code Online (Sandbox Code Playgroud)

两个子程序都在同一个包中,因此this_may_fail会自动标记为安全.有没有办法告诉Carp this_may_fail应该被视为不安全?

ike*_*ami 3

这是regular_code被认为“安全”的this_may_fail。该检查基于命名空间,因此为了使其不安全,您需要将其放置this_may_fail在不同的命名空间中。


或者自己写一个黄花鱼。

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
Run Code Online (Sandbox Code Playgroud)