寻找更清晰的Carp :: croak()

时间:2012-02-28 14:46:05

标签: perl

我最近注意到我将__PACKAGE__和子/方法名称添加到大多数croak()的邮件中,因为它可以更轻松地跟踪错误。所以我开始编写一个_croak()包装器,默认添加它(使用caller(1))。

E.g。

sub _croak {
    my ($msg) = shift // '';
    $msg = (caller 1)[3].': '.$msg
        unless ref $msg;
    Carp::croak($msg);
};

现在每个(文本)异常都归因于我的模块被误用(例如,传递了错误的参数),到模块本身。

问题是:这是否有标准的模块/技术? (完全堆栈跟踪aka confess()在大多数情况下都是过度的)。

2 个答案:

答案 0 :(得分:3)

我让记录器执行此操作,而不是让croak添加来电者信息。 Log4perl让我设置我关注的消息的格式。 croak完成它的工作,记录器让我看看发生了什么。

答案 1 :(得分:2)

标准技术是继续生成简单的异常,并在需要时通过从命令行加载Carp::Always ::Color将它们转换为堆栈跟踪。