我和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/