【问题标题】:DelegationToAClassWhichIsNotLoaded error with Moose and XML::LibXMLDelegationToAClassWhichIsNotLoaded 错误与 Moose 和 XML::LibXML
【发布时间】:2014-02-13 14:46:33
【问题描述】:

我有一个使用 Moose 的简单测试类,具有 XML::LibXML::Document 属性,但是当我使用这个测试类时出现错误。 测试类是:

package moosetest;

use strict;
use warnings;

use XML::LibXML;

use Moose;

has dom => ( is => 'rw', isa => 'XML::LibXML::Document', required => 0, handles => qr/^( findnodes | documentElement | setDocumentElement | toString | toFile )$/x );


1;

然后在test.pl中使用:

use XML::LibXML;

use moosetest;

my $tt = moosetest->new();

当我运行 test.pl 时,我得到一个错误:

dom 属性试图委托给一个尚未加载的类 - XML::LibXML::Document

我用的是perlbrew,安装了XML::LibXML(不用Moose也可以实例化一个XML::LibXML::Document对象),Moose也安装成功了。

看起来我在这里遗漏了一些重要的东西,但我找不到问题的根源......

感谢您的帮助。

弗朗索瓦。

【问题讨论】:

    标签: perl moose


    【解决方案1】:

    Moose::Meta::Attribute::_find_delegate_metaclass 使用Moose::Util::_is_package_loaded 在@INC 中查找XML::LibXML::Document。但是,包XML::LibXML::Document 位于 XML/LibXML.pm 中。

    使用数组代替正则表达式处理句柄可以避免这个问题:

    handles => [ qw( findnodes documentElement setDocumentElement toString toFile ) ],
    

    【讨论】:

    • 好的,它适用于您建议的更改。对我来说还是很奇怪...我会修复代码,但它曾经与以前版本的 perl (5.16)、XML::LibXML 和 Moose 一起工作,当我尝试升级我的开发环境时出现错误...
    • 好的,回答我自己:它曾经与 Moose 2.0802 一起工作,但在最新版本中失败了。可能是由于2.1100的变化(改变了类加载器)...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2011-09-04
    • 2017-01-15
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多