use strict; use warnings; use XML::Simple; use Data::Dumper; my $xml = do {local $/='';'in.xml'} ; my $servers = XMLin($xml, ForceArray => 1); my %seen; my @networklist; my @brlist; my @vlist; for my $server (@{$servers->{server}}){ my $node = $server->{NodeName__1}; my $lanip = $server->{CoreLanIP_1__1}; my $mask = $server->{CoreLanNetmask_1}; my $network = join("/", $lanip, $mask); $network =~ s/.[0-9]*\//.0\//g; push @networklist, $network if ! $seen{$network}++; if ($server->{BRLAN} eq "y" ){ core_lan($server); } else { core_vlan($server); } } # output print "\nBRNW LIST\n"; print Dumper \@brlist; print "\nVLAN LIST\n"; print Dumper \@vlist; exit(0); # # subroutine definitions # sub core_lan { my $server = shift; my $brip = $server->{BR_IP}; my $num = $server->{CoreLanNum}; for (1..$num){ my $corebrip = $server->{'CoreLanIP_'.$_.'__1'}; my $brmask = $server->{'CoreLanNetmask_'.$_}; if ($corebrip eq $brip){ my $brlist = join ("/", $brip, $brmask); $brlist =~ s/.[0-9]*\//.0\//g; push @brlist, $brlist unless $seen{$brlist}++; } else { print "coreip doesnot matches brip\n"; } } } sub core_vlan { my $server = shift; my $brip = $server->{BR_IP}; my $vnum = $server->{CoreVlanNum}; for (1..$vnum){ my $vlanip = $server->{'CoreVlan_IP_'.$_}; my $vmask = $server->{'CoreVlan_Netmask_'.$_}; if ($brip && $vlanip eq $brip){ my $vlist = join ("/", $brip, $vmask); $vlist =~ s/.[0-9]*\//.0\//g; push @vlist, $vlist if ! $seen{$vlist}++; } } }