sub deaccent { my $phrase = shift; return $phrase unless ( $phrase =~ y/\xC0-\xFF// ); #short circuit if no upper chars # translterate what we can (for speed) $phrase =~ tr/ÀÁÂÃÄÅàáâãäåÇçÈÉÊËèéêëÌÍÎÏìíîïÒÓÔÕÖØòóôõöøÑñÙÚÛÜùúûüÝÿý/AAAAAAaaaaaaCcEEEEeeeeIIIIiiiiOOOOOOooooooNnUUUUuuuuYyy/; # and substitute the rest my %trans = qw(Æ AE æ ae Þ TH þ th Ð TH ð th ß ss); $phrase =~ s/([ÆæÞþÐðß])/$trans{$1}/g; return $phrase; } #### foreach my $row_db ( sort { deaccent($a) cmp deaccent($b) } @$selected ) { #### foreach my $row_db ( sort { deaccent($a->[1]) cmp deaccent($b->[1]) } @$selected ) { my ($ID, $column1, $column2) = @$row_db; print "$column1\n"; } #### foreach my $row_db (map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [$_, deaccent($_)] } @$selected ) { #### foreach my $row_db (map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [$_, deaccent($_->[1])] } @$selected ) { my ($ID, $column1, $column2) = @$row_db; print "$column1\n"; }