您好,
我有以下XML :: Twig代码来打印一些标记信息。但是,不是将数组解析为twig处理程序子,而是需要解析散列。
my $twig = XML::Twig->new(
pretty_print => 'indented',
twig_handlers =>{'tag1'=>sub{Modify_tag1_data(@_,\@Array_Vals,\@Array_Types)}});
sub Modify_tag1_data{
my ( $twig, $tag1,$Array_Vals,$Array_Types) = @_;
#
$tag1 = $_->att('f');
if($Array_Vals[$tag1] eq 'f' && $Array_Types[$tag1] eq 'test'){
print $tag1 . "\n";
}
}
但是下面的代码,现在包含哈希而不是数组,会出现错误,指出symbo%Hash_Vals需要显式包名,并且变量%Hash_Types也有相同的错误。
my $twig = XML::Twig->new(
pretty_print => 'indented',
twig_handlers =>{'tag1'=>sub{Modify_tag1_data(@_,\%Hash_Vals,\%Hash_Types)}});
sub Modify_tag1_data{
my ( $twig, $tag1,$Hash_Vals,$Hash_Types) = @_;
#
$tag1 = $_->att('f');
if($Hash_Vals{$tag1} eq 'f' && $Hash_Types{$tag1} eq 'test'){
print $tag1 . "\n";
}
}
有什么问题?
答案 0 :(得分:2)
这个问题似乎有点误导。如果你得到:“%Hash_Vals需要显式包名称和变量%Hash_Types的相同错误。”
...这意味着您尚未声明这些变量。这与XML::Twig
或XML
解析根本没什么关系。
在你的潜艇中,你也在做一些奇怪的事情 - 我怀疑你没有做你想做的事情:
sub Modify_tag1_data{
my ( $twig, $tag1,$Hash_Vals,$Hash_Types) = @_;
#
$tag1 = $_->att('f');
if($Hash_Vals{$tag1} eq 'f' && $Hash_Types{$tag1} eq 'test'){
print $tag1 . "\n";
}
}
由于您的参数中的$Hash_Vals
与$Hash_Vals{$tag1}
之间的没有连接,除了看起来类似之外。您可能想要$Hash_Vals -> {$tag1}
,但在不知道%Hash_Vals
实际包含的内容的情况下很难说出来。