http://www.perlmonks.org?node_id=1027492

kiranveluri has asked for the wisdom of the Perl Monks concerning the following question:

Hi I am new to perl,trying to read an XML file attached below.I am able to read the file using XML::Simple Module.I could not loop through the hash.Can some one help me in looping through the variables mentioned in below XML file output . I tried variuos scenarions but couldn't parse through the elements.

$VAR1 = { 'cmd' => { 'parameter' => { 'Additional information about port $ +port' => { + 'cycle' => '1300', + 'command' => [ + { + 'run' => 'ps -fp $pid', + 'text' => '^(\\w+)\\s+\\d+\\s+(\\d+)\\s+\\S+\ +\s+\\S+\\s+\\S+\\s+\\d+:\\d+:\\d+\\s+(.*)$', + 'output' => 'Full command line:$3, Parent PID +:$2' + }, + { + 'run' => 'service iptables status | grep dpt: +$port', + 'text' => '^(\\d+)\\s+(DROP|ACCEPT)\\s+(udp|t +cp|icmp|all)\\s+\\S+\\s+(\\S+)\\s+(\\S+)\\s+(.*)$', + 'output' => 'Iptables takes action $2 for por +t $port' + } + ] + }, 'Tcp Ports In Listen State' => { 'cycl +e' => '1200', 'comm +and' => [ + { + 'run' => 'netstat -pant | grep LISTEN', + 'text' => '^(\\w+)\\s+\\d+\\s+\\d+\\s+[\\d.]+:(\\d+)\\s+[\\ +d.]+:\\D+\\s+\\S+\\s+(\\d+)/(\\S+)', + 'data' => ' $protocol = $1 $port = $2 $pid = $3', + 'output' => ' $1 port $2 was opened by $4 process having p +id $3' + } + ] } } } }

Replies are listed 'Best First'.
Re: XML Parsing
by hdb (Monsignor) on Apr 08, 2013 at 13:05 UTC

    You need to learn about references. Here is some code but it will be difficult to understand.

    for my $parm (sort keys %{ $$VAR1{cmd}{parameter} } ) { print "$parm\n"; print "\tCycle:",$$VAR1{cmd}{parameter}{$parm}{cycle},"\n"; print "\tCommand:\n"; for my $cmd ( @{ $$VAR1{cmd}{parameter}{$parm}{command} } ) { for my $key ( sort keys %{$cmd} ) { print "\t\t$key: ",$$cmd{$key},"\n"; } print "\n"; } }
Re: XML Parsing
by RichardK (Parson) on Apr 08, 2013 at 13:28 UTC

    The Perl Data Structures Cookbook perldsc is full of examples and will help you understand how to navigate such things. You should have a local copy too, try 'perldoc perldsc'.

Re: XML Parsing
by Rahul6990 (Beadle) on Apr 08, 2013 at 13:05 UTC
Re: XML Parsing
by grantm (Parson) on Apr 09, 2013 at 00:44 UTC