Используем для этого модуль 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';
Вот таким вот образом мы сохраняем данные в 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" } } } };
Вот, что у нас получилось: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;
А теперь прочитаем назад этот XML-файл в хэш:<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>
Дамп восстановленного хэша: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' } } } };
Немає коментарів:
Дописати коментар