perl - Moose 和 MooseX::Declare 的有用错误

标签 perl moose

Moose 非常可爱,但有时简单的拼写错误会导致令人毛骨悚然的长堆栈跟踪,在我看来,有用的内容为零。

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

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

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

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

根据下面的建议,我正在使用这个 not-quite-a-module-yet 来减轻我的头痛,欢迎更多的想法,不过:

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;

最佳答案

我前段时间尝试的一种方法是将 Moose 相关的类放入 %Carp::Internal哈希,是这样的:

$Carp::Internal{$_}++ for qw{
    Class::MOP
    Class::MOP::Attribute
    Class::MOP::Class
    ...
};

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

你可以通过遍历%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/;
}

关于perl - Moose 和 MooseX::Declare 的有用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171255/

相关文章:

perl - 为什么 MySQL DATE_FORMAT 打印出空白结果?

Perl、SAX 和系统实体

perl - 我们为什么要使用 Catalyst 的 Context 对象?它的目的是什么?

perl - 扩展 Moose 对象类的构造顺序是什么?

perl - 如何从大哈希实例化 Moose 类

perl - 尝试在 Win32 上通过 PPM/Activestate 5.12 安装 Moose-2.000 - 找不到 404

perl - 如何确定正在加载 Moose 的模块是什么?

regex - perl 在正则表达式中使用常量

perl:打印对象属性

perl - Moose:覆盖派生类中的 `required` 属性