我正在尝试使用Perl读取xml
文件。
我尝试XML::Simple
并使用XML::LibXML
,但在这两种情况下我都遇到了问题。
对于XML::Simple
,它说
"keys on reference is experimental
Using a hash as a reference is deprecated"
当我使用以下
时foreach my $k ({keys %$ref->{version}}) # output to conf
{
print STDERR Dumper($k);
}
对于XML::LibXML
,我得到了"Can't locate XML/LibXML/Error.pm in @INC (you may need to install the XML::LibXML::Error module)"
。
当我尝试使用LibXML
安装Activeperl ppm UI
时,我在那里找不到该软件包。然后,我从其他来源下载了LibXML
,并在"C:\Perl64\lib"
和"C:\Perl64\site\lib"
中复制了所需的文件。
我使用的是perl 5,版本20。 我怎样才能使它发挥作用?
答案 0 :(得分:4)
XML::LibXML是一个XS模块,因此只复制源(甚至编译文件)通常不起作用。你必须正确安装它。
语法%$ref->{version}
很奇怪。你的意思是
%{ $ref->version }
还是其他什么?你能否展示Data::Dumper' s Dumper($ref)
?
答案 1 :(得分:3)
您的XML ::简单问题只是对语法的误解。看起来您意识到需要使用%
取消引用哈希引用,但是您没有意识到需要将表达式返回哈希引用的小{ ... }
块。
所以你在哪里:
%$ref->{version}
你真的想要:
%{$ref->{version}}
哦,它比这稍差一点。你在表达式周围有一个额外的{ ... }
- 所以你明确地将表达式转回哈希引用。你想要的是:
foreach my $k (keys %{$ref->{version}})
您在$k
中返回的每个值都将是一个哈希键。哈希键总是字符串。因此,您在下一行中对Dumper
的调用也是不必要的。