#!/usr/bin/env perl use strict; use warnings; use constant { NO_CASE => 0, COUNT => 1, }; my (@data_all, %data_info); while () { chomp; push @data_all, $_; if (exists $data_info{$_}) { ++$data_info{$_}[COUNT]; } else { $data_info{$_} = [lc, 1]; } } print "Sort alphabetically - ignore case\n"; print "$_\n" for map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_, $data_info{$_}[NO_CASE] ] } @data_all; print "Sort alphabetically - capitalisation matters\n"; print "$_\n" for map { $_->[0] } sort { $a->[1] cmp $b->[1] || $a->[2] cmp $b->[2] || $a->[0] cmp $b->[0] } map { [ $_, substr($data_info{$_}[NO_CASE], 0, 1), substr($_, 0, 1) ] } @data_all; print "Sort by frequency - ignore alphabetical order\n"; print "$_->[1]: $_->[0]\n" for sort { $b->[1] <=> $a->[1] } map { [ $_, $data_info{$_}[COUNT] ] } keys %data_info; print "Sort by frequency - then by alphabetical order\n"; print "$_->[1]: $_->[0]\n" for sort { $b->[1] <=> $a->[1] || $a->[0] cmp $b->[0] } map { [ $_, $data_info{$_}[COUNT] ] } keys %data_info; __DATA__ bb Aa CC dD bb AA dD aa BB aa dD aA