push @{$H{$1}{$3}{head}}, $2; push @{$H{$1}{$3}{tail}}, grep{$_} split ':', $4; #### foreach my $k1 (sort {$a <=> $b} keys %H) { print "$k1\n"; foreach my $k2 (sort {$a <=> $b} keys %{$H{$k1}}) { print "$k2\n"; my $tail = join ':', sort {$a <=> $b} @{$H{$k1}{$k2}{tail}}; foreach my $head (sort {$a <=> $b} @{$H{$k1}{$k2}{head}}) { print "$head|$tail\n"; } } }