use charnames qw(); my $s = "Müller"; my $t = ""; for my $ch (split //, $s) { my $ord = ord $ch; if ($ord > 127) { my $charname = charnames::viacode($ord); if ($ord == 223) { # Ausnahme sz $t .= "ss"; } elsif ($charname =~ /(CAPITAL|SMALL)\s+LETTER\s+(.)/) { if ($1 eq 'CAPITAL') { $t .= uc($2); } else { $t .= lc($2); } } else { $t .= "?"; } } else { $t .= $ch; } } warn $t;