我有一个使用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也已成功安装。
看起来我在这里缺少一些重要的东西,但我找不到问题的根源......
感谢您的帮助。
弗朗索瓦。
答案 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 ) ],