Используем для этого модуль XML::Simple. Для дампа хэша используем Data::Dumper.
Имя XML-файла куда будем сохранять наш хэш:#!/usr/bin/perl use strict; use warnings; use XML::Simple; use Data::Dumper; $Data::Dumper::Indent = 1; $Data::Dumper::Terse = 1;
Пример многоуровневого хэша:my $conf_xml = 'serpol.xml';
my $routers = {
"router0" => {
user => 'user0',
password=> 'pass0',
enable => 'enab0',
edgedev => {
'switch00' => { type => "Cisco" },
'switch01' => { type => "ExtremeNetworks" },
'dslam0' => { type => "Alcatel 7324" }
}
},
"router1" => {
user => 'user1',
password=> 'pass1',
enable => 'enab1',
edgedev => {
'switch10' => { type => "Cisco" }
}
}
};
Вот таким вот образом мы сохраняем данные в XML-файл:
my $xml_os = XML::Simple->new();
open my $fh, '>:encoding(utf8)', $conf_xml or die "open($conf_xml): $!";
my $xml = $xml_os->XMLout( $routers,
OutputFile => $fh,
RootName => 'serpol',
AttrIndent => 0,
NoAttr => 0
);
close $fh;
undef $xml_os;
Вот, что у нас получилось:
<serpol>
<router0 enable="enab0" password="pass0" user="user0">
<edgedev name="dslam0" type="Alcatel 7324" />
<edgedev name="switch00" type="Cisco" />
<edgedev name="switch01" type="ExtremeNetworks" />
</router0>
<router1 enable="enab1" password="pass1" user="user1">
<edgedev name="switch10" type="Cisco" />
</router1>
</serpol>
А теперь прочитаем назад этот XML-файл в хэш:Дамп восстановленного хэша:my $xml_is = XML::Simple->new(); my $hash = $xml_is->XMLin( $conf_xml ); print Dumper( $hash ); undef $xml_is;
{
'router1' => {
'enable' => 'enab1',
'password' => 'pass1',
'user' => 'user1',
'edgedev' => {
'name' => 'switch10',
'type' => 'Cisco'
}
},
'router0' => {
'enable' => 'enab0',
'password' => 'pass0',
'user' => 'user0',
'edgedev' => {
'dslam0' => {
'type' => 'Alcatel 7324'
},
'switch01' => {
'type' => 'ExtremeNetworks'
},
'switch00' => {
'type' => 'Cisco'
}
}
}
};
Немає коментарів:
Дописати коментар