note
Utilitarian
When examining your data you should probably examine what you want, in this cae 2 arrays keyed on the first column, there's no need to create sepearate data structures and in fact having a single data structure makes passing it to subsequent functions easier.
So here's a solution using a single data structure with each customer referencing 2 arrays, one for time and the other for location.
<c>
~/$ cat tmp.pl
#!/usr/bin/perl
use strict;
use warnings;
open(my $customers, $ARGV[0])|| die "Couldn't open $ARGV[0] $!\n";
my %cust;
while(<$customers>){
chomp;
my @rec=split(/\s+/, $_);
push @{$cust{$rec[1]}->{time}},$rec[0];
push @{$cust{$rec[1]}->{location}},$rec[2];
}
for my $cust (sort keys %cust){
print "$cust: ",join(" ",@{$cust{$cust}->{time}})," : ",join(" ",@{$cust{$cust}->{location}}),"\n";
}
~/$ perl tmp.pl tmp.dat
a: 12:10 12:13 : america australia
b: 12:11 2:30 : bombay bhutan
c: 12:12 : calcutta
n: 3:40 : neterland
</c>
<!-- Node text goes above. Div tags should contain sig only -->
<div class="pmsig"><div class="pmsig-681898">
<c>print "Good ",qw(night morning afternoon evening)[(localtime)[2]/6]," fellow monks."</c>
</div></div>
1041955
1041955