微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl – 如何用Carp将呼叫标记为“不安全”?

我遇到了与 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会自动标记为安全.有没有办法告诉Carp这个_may_fail应该被视为不安全?

解决方法

这是由this_may_fail认为“安全”的regular_code.检查基于命名空间,因此为了使其不安全,您可以将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

原文地址:https://www.jb51.cc/Perl/241736.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐