XML::Twig 将 Hash 解析为 twig handler sub
XML::Twig Parse Hash to twig handler sub
嗨,
我有下面的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";
}
}
然而,下面的代码现在包含散列而不是数组,给出了一个错误,指出符号 %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";
}
}
怎么了?
这个问题好像有点误导。如果您得到:“%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
实际包含什么,则很难判断。
嗨,
我有下面的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";
}
}
然而,下面的代码现在包含散列而不是数组,给出了一个错误,指出符号 %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";
}
}
怎么了?
这个问题好像有点误导。如果您得到:“%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
实际包含什么,则很难判断。