The documentation for XML::Simple says:
STATUS OF THIS MODULE
The use of this module in new code is discouraged. Other modules are available which provide more straightforward and consistent interfaces. In particular, XML::LibXML is highly recommended and XML::Twig is an excellent alternative.
So here’s an example using XML::Twig. It’s adapted from the example code here:
#! perl
use strict;
use warnings;
use Data::Dump;
use XML::Twig;
my $twig = XML::Twig->new
(
twig_roots =>
{
'Body/QueryXmlResponse/QueryXmlResult/queryResult/data/row' =>
\&get_data,
}
);
my %data;
$twig->parse(\*DATA);
dd \%data;
sub get_data
{
my ($twig, $row) = @_;
$data{ $_->tag } = $_->text for $row->children;
$twig->purge;
}
__DATA__
<?xml version="1.0"?>
<!DOCTYPE stats SYSTEM "stats.dtd">
<Body>
<QueryXmlResponse>
<QueryXmlResult>
<queryResult>
<template>
<resultset>
<column>
<FriendlyName>
<ordinal>2</ordinal>
<type>String</type>
</FriendlyName>
<AddressMask>
<ordinal>1</ordinal>
<type>String</type>
</AddressMask>
<SubnetAddress>
<type>String</type>
<ordinal>0</ordinal>
</SubnetAddress>
</column>
</resultset>
</template>
<data>
<row>
<c2>Extra Subnet</c2>
<c1>255.255.248.0</c1>
<c0>192.168.221.0</c0>
</row>
</data>
<xmlns:xsi>http://www.w3.org/2001/XMLSchema-instance</xmlns:xs
+i>
</queryResult>
</QueryXmlResult>
<xmlns>http://schemas.solarwinds.com/2007/08/informationservice</x
+mlns>
</QueryXmlResponse>
</Body>
Output:
17:25 >perl 1536_SoPW.pl
{ c0 => "192.168.221.0", c1 => "255.255.248.0", c2 => "Extra Subnet" }
17:25 >
Hope that helps,