#!perl use strict; use warnings; use open qw( :std :encoding(UTF-8) ); use charnames qw( :full ); use Unicode::Collate; my $DISAMBIGUATOR_CHARACTER = "\N{LATIN SMALL LIGATURE FFL}"; # U+FB04 my %president_number_by; # President number by president name my %seen; while () { chomp; my ($name, $number) = split m/,/, $_, 2; $seen{$name} = exists $seen{$name} ? $seen{$name} . $DISAMBIGUATOR_CHARACTER : $name ; $president_number_by{$seen{$name}} = $number; } my $collator = Unicode::Collate->new(); for my $name ($collator->sort(keys %president_number_by)) { my $number = $president_number_by{$name}; $name =~ s/$DISAMBIGUATOR_CHARACTER+$//; print "$name,$number\n"; } exit 0; __DATA__ Washington,1 Adams,2 Jefferson,3 Madison,4 Monroe,5 Adams,6 Jackson,7 Van Buren,8 Harrison,9 Tyler,10 Polk,11 Taylor,12 Fillmore,13 Pierce,14 Buchanan,15 Lincoln,16 Johnson,17 Simpson,18 Hayes,19 Garfield,20 Arthur,21 Cleveland,22 Harrison,23 Cleveland,24 McKinley,25 Roosevelt,26 Taft,27 Wilson,28 Harding,29 Coolidge,30 Hoover,31 Roosevelt,32 Truman,33 Eisenhower,34 Kennedy,35 Johnson,36 Nixon,37 Ford,38 Carter,39 Reagan,40 Bush,41 Clinton,42 Bush,43 Obama,44 Bush,45