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/