Perl 无法访问使用XML解析器创建的数组元素的哈希
我的XML解析器如下所示:Perl 无法访问使用XML解析器创建的数组元素的哈希,perl,Perl,我的XML解析器如下所示: $VAR1 = { 'Symmetrix' => { 'Masking_View' => { 'View_Info' => { 'Initiators' => { 'user_node_name' => [ '5001438001725614',
$VAR1 = {
'Symmetrix' => {
'Masking_View' => {
'View_Info' => {
'Initiators' => {
'user_node_name' => [
'5001438001725614',
'5001438001725714'
],
'user_port_name' => [
'5001438001725614',
'5001438001725714'
],
'wwn' => [
'5001438001725614',
'5001438001725714'
]
},
'port_grpname' => 'PG_1E0_2E0'
}
},
'Symm_Info' => {
'symid' => '000295900074'
}
}
};
我正在尝试提取wwn
的元素。但是我打不通
#!C:\Perl\bin
use strict;
use XML::Simple;
use Data::Dumper;
my $input_file = $ARGV[0];
my $detail_info = XMLin("$input_file");
# Loop through each view_info
$detail_info->{Symmetrix}{Masking_View}{View_Info} = [ $detail_info->{Symmetrix} {Masking_View}{View_Info} ] if ref ($detail_info->{Symmetrix}{Masking_View}{View_Info}) ne 'ARRAY';
foreach my $view_info (@{$detail_info-> {Symmetrix}{Masking_View}{View_Info}})
{
$view_info->{Initiators} = [$view_info->{Initiators}] if ref ($view_info-> {Initiators}) ne 'ARRAY';
foreach my $wwn (keys %{$view_info->{Initiators}})
{
my @flags = ();
push (@flags,"$wwn:$view_info->{Initiators}{$wwn}";
print @flags;
#"{$wwn->{wwn}}";
}
}
我得到的输出如下
{ARRAY(0x20c8904)}
我正在不同行的单行中查找
wwn
元素。您生成的代码太多,无法区分arrayref值和非参考值。要求您设置ForceArray
选项,因此您可以确保每个值都是arrayref,即使其中只有一个元素
use strictures;
use XML::Simple qw(:strict);
my $detail_info = XMLin($ARGV[0], ForceArray => 1, KeyAttr => []);
# $detail_info is {
# Symmetrix => [
# {
# name => 'Masking_View',
# View_Info => [
# {
# Initiators => [
# {
# user_node_name => [5001438001725614, 5001438001725714],
# user_port_name => [5001438001725614, 5001438001725714],
# wwn => [5001438001725614, 5001438001725714]
# }
# ],
# port_grpname => 'PG_1E0_2E0'
# }
# ]
# },
# {
# name => 'Symm_Info',
# symid => '000295900074'
# }
# ]
# }
my @flags;
for my $view_info (@{ $detail_info->{Symmetrix}[0]{View_Info} }) {
for my $initiator (@{ $view_info->{Initiators} }) {
push @flags, $initiator->{wwn};
}
}
# @flags is (
# [
# 5001438001725614,
# 5001438001725714
# ]
# )
还提供XML输入文件。它的大文件,我该怎么做?相反,我粘贴了XML解析,o/pI之前也尝试过,o/p为空,这与脚本运行时相同。