my %country_names = ( "AF" => "Afghanistan", "AX" => "Aland Islands", "AL" => "Albania", "DZ" => "Algeria", "AS" => "American Samoa", "AD" => "Andorra", ); my @intl_files = ; chomp @intl_files; # not needed when using opendir/readdir #map removes the ".txt" file suffix #sort compares country names, not codes my @sorted = sort { $country_names{ $a } cmp $country_names{ $b } } map { substr( $_, 0, rindex( $_, '.' ) ) } @intl_files; foreach my $file ( @sorted ) { print "\n"; } __DATA__ AL.txt DZ.txt AS.txt