Moose和MooseX :: Declare的有用错误

Ale*_*lex 8 perl moose

麋是非常可爱的,但是从我的观点来看,有时简单的拼写错误可能导致令人兴奋的令人兴奋的长堆栈,零有用的内容.

那么,是否有任何工具可以将这种爆炸解释为有用的东西?

特别是对于使用普通Moose,Moose + MooseX :: Method :: Signatures和MooseX :: Declare的类.

这些工具只需要在开发过程中有所帮助,以捕捉那些使事情无效的错字或思考问题.

=========================

下面的建议之后,我用这个并不十分-A模块,但它减少我的头疼一点,更多的想法表示欢迎,但:

package MooseX::QuietCarping;
# Not actually a Moose thing, but helpful for Moose.
# calm Moose-internal stacktraces down a little
use Carp;

my %retain = ();
sub import {
    my $class = shift;
    $retain{$_}++ for @_;
}

CHECK {
    for (sort keys %INC) {
    s{\.pm$}{};
    s{[/\\]}{::}g; # CROSS PLATFORM MY ARSE
    next if $retain{$_};
    $Carp::Internal{$_}++ if /^(?:Class::MOP|Moose|MooseX)\b/
    }
    %retain = (); # don't need this no more
}

1;
Run Code Online (Sandbox Code Playgroud)

bvr*_*bvr 4

我前段时间尝试过的一种方法是将 Moose 相关的类放入哈希中%Carp::Internal,如下所示:

$Carp::Internal{$_}++ for qw{
    Class::MOP
    Class::MOP::Attribute
    Class::MOP::Class
    ...
};
Run Code Online (Sandbox Code Playgroud)

此类将在堆栈跟踪中跳过,使其更加紧凑并强调您自己的代码。

%INC您可以通过遍历变量来找到它们:

package Dummy;
use Moose;
use MooseX::Declare;
# use ....;

for (sort keys %INC) {
    s{\.pm$}{};
    s{/}{::}g;
    print "$_\n" if /^(Class::MOP|Moose|MooseX)\b/;
}
Run Code Online (Sandbox Code Playgroud)