This question has really intrigued me, so sorry for the flurry of posts. I was thinking about extending the sort concept to include the same case concerns for all characters in the strings.
The original question would lead to odd results when comparing 'Amy' to 'AMy', because 'AMy' would come before 'Amy', since 'M' comes before 'm'. So i was thinking, if lowercase comes before upper case on the first letter, why not for subsequent letters, so heres a neat sorter to deal with it:
(my $rev_a = $a) =~ tr/A-Za-z/a-zA-Z/;
(my $rev_b = $b) =~ tr/A-Za-z/a-zA-Z/;
return $rev_a cmp $rev_b;
It just exploits that we want normal string cmp(), except that same letter different case sorting is reversed.