$VAR1 = {
'ryan' => [
'ipad',
'2005',
'cell',
'2009'
],
'Brian' => [
'ipad',
'2001',
'ipad',
'2001',
'ipad',
'2001'
],
'Andrew' => [
'ipad',
'2009'
]
};
that is not a HashOfHashes, it is a HashOfArrays.
push @{$hash{$name}},$col2,$col3 is creating 2 array element for each line of data
push @{$hash{$name}},"$col2,$col3" creates only 1 array element for each line. see push
A HashOfHashes (HoH) would be used if you wanted to replace multiple records the same with 1 record and a count, like this
while (<IN>){
s/^\s+|\s+$//g; # trim leading/trailing spaces
my ($col1,$col2,$col3) = split /\s+/,$_,4;
if ($col1 eq 'name'){
$name = $col2;
} elsif ($col1 eq 'device') {
#push @{$hash{$name}},"$col2\t$col3";
++$hash{$name}{$col2}{$col3}; #HoH
} else {
# skip line
}
}
close IN;
foreach my $name (keys %hash){
print "$name\n";
foreach my $col2 (keys %{$hash{$name}}){
foreach my $col3 (keys %{$hash{$name}{$col2}}){
my $count = $hash{$name}{$col2}{$col3};
print "\t$col2\t$col3\t$count\n";
}
}
}
poj
|