#!/usr/bin/perl use strict; use warnings; use XML::XPath; use feature 'say'; my $appxml = 'ApplicationList.xml'; my $appxp = XML::XPath->new(filename => $appxml); my $xp = $appxp->findnodes('//application_list/application/'); my %appid; my @apprecords; foreach my $appnodeset ($xp->get_nodelist) { my $id = $appnodeset->find('@id')->string_value; $id =~ s/^\s+|\s+$//g; foreach my $spltname ( $appxp->findnodes('./contacts/technical', $appnodeset) ) { my $name = join ",", map $_->string_value, $spltname->findnodes('.//name'); # add this as suggested by choroba $appid{$id} = $name; say $name; } } __END__ $ perl test.pl John,Ram,Rahim