# hash... # array... while () { while () { $hash{key_part($_)}++ ; push @array, key_part($_) ; } ; } ; my $p = '' ; my $c = 1 ; foreach (sort keys %hash) { foreach (sort @array) { if ($p ne $_) { print "$_\: $hash{$_}\n" ; print "$p\: $c\n" ; $p = $_ ; $c = 1 ; } else { ++$c ; } ; } ; } ; print "$p\: $c\n" ; #### # hash... # array... while () { while () { my $k = key_part($_) ; push @keys, $k if !$hash{$k} ; push @array, key_part($_) ; $hash{$k}++ ; } ; } ; my $p = '' ; my $c = 1 ; foreach (sort { $array[$a] cmp $array[$b] || $a <=> $b }, (0..$#array)) { my $k = $array[$_] ; if ($p ne $k) { push @keys, $p ; @counts = map $hash{$_}, @keys ; push @counts, $c ; $p = $k ; $c = 1 ; } else { ++$c ; } ; } ; } ; push @keys, $p ; push @count, $c ;