DelegationToAClassWhichIsNotLoaded错误与Moose和XML :: LibXML

时间:2014-02-13 14:46:34

标签: perl moose

我有一个使用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也已成功安装。

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

感谢您的帮助。

弗朗索瓦。

1 个答案:

答案 0 :(得分:1)

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

使用数组代替regex处理句柄可以避免此问题:

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