perl - 如何从 Moose 获取结构化异常?

标签 perl moose

考虑这个简单的类:

package Foo;
use Moose;
has foo => ( is => 'rw', isa => 'Int' );

然后这个代码:
use Try::Tiny;
use Foo;
my $f = try {
    Foo->new( foo => 'Not an Int' );
}
catch {
    warn $_;
};

代码死了,有一个关于类型约束失败的很好的大错误消息。

我希望能够提取失败的属性( foo ),原因是什么(失败的类型约束)以及传递的值是什么( Not an Int ),而无需解析错误字符串来获取信息。

像这样的东西:
catch {
    if( $_->isa( 'MooseX::Exception::TypeConstraint' ) ) {
         my $attrib = $_->attribute;
         my $type   = $_->type;
         my $value  = $_->bad_value;

         warn "'$value' is an illegal value for '$attrib'.  It should be a $type\n"; 
    }
    else {
         warn $_;
    }
};

这可能吗?是否有 MooseX 发行版可以实现这一目标?更好的是,是否有一些我错过的 Moose 功能可以使这成为可能?

更新:我对类型约束特别感兴趣,但其他 Moose 错误也会很好。我也知道我可以用 die 扔东西.因此,在我编写的代码中构造异常相对容易。

最佳答案

我自己没试过,但我觉得MooseX::Error::Exception::Class可能就是你要找的。

关于perl - 如何从 Moose 获取结构化异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2241384/

相关文章:

perl - 是否可以将 sprintf 类型参数传递给 Perl 函数?

perl - 如何包装 require 和 use?

perl - 从 BEGIN block 中调用 Perl fork

perl - Perl 面向对象设计模式

perl - 使用 Perl/Moose,修饰符返回的值会发生什么情况?

perl - MooseX::NonMoose 类中的混合问题

xcode - OSX 10.6 "make"命令不工作

perl - 我应该先学习 Perl 5 OO 还是 Moose?

perl - 将 Moose 别名与 MooseX::Constructor::AllErrors 一起使用

xml - 在 perl 的子程序中声明全局变量