Several issues.
- The XML isn't well-formed.
- The code doesn't compile under strict.
- What's $xp?
- You can't call the find method on a nodelist.
- You can't call a method on an undefined value, i.e. when you create a new variable with my but don't assign anything to it, it's wrong to call ->find on the next line.
Here's my approach, as close to yours as possible:
#! /usr/bin/perl
use warnings;
use strict;
use XML::XPath;
my $appxp = XML::XPath->new(filename => shift);
my $xp = $appxp->findnodes('//application/');
my %appid;
my @apprecords;
for my $node ($xp->get_nodelist) {
my $id = $node->find('@id')->string_value;
$id =~ s/^\s+|\s+$//g;
for my $spltnum ($node->findnodes('number/mobile/',$node)) {
my $contact = join ",", map $_->string_value, $spltnum->findno
+des('.//contact');
$appid{$id} = $contact;
}
}
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,