hi,
Demnach werden Umlaute wohl nicht unterstützt?
Seit Perl v5.6 unterscheidet Perl zwischen Oktetten und Zeichenketten. Für UTF-8-Zeichenketten gibt es den internen ScalarValue UTF-8, kurz: SvUTF8.
Das Verhalten der String-Funktionen ist abhängig davon, ob Oktetten oder Zeichenketten übergeben werden, z.B.:
use utf8;
print length 'ä'; # 1, also 1 Zeichen
no utf8;
print length 'ä'; # 2, also 2 Oktetten
Ähnlich ists mit anderen Stringfunktionen uc(), ucfirst() usw.
ucfirst('ä') liefert nur dann, ein 'Ä', wenn
1. das Script in utf-8 gespeichert wurde
2. use utf8; eingebunden wurde
use utf8 wirkt jedoch nur auf die im Script selbst notierten Literale, in og. Bsp. 'ä'
Hast Du UTF-8 in einer Variable $s, funktioniert uc($s) nur dann, wenn in $s keine Oktetten sind sondern eine UTF-8-kodierte Zeichenkette als SvUTF8. Mit Modul Encode (seit v5.8 verfügbar) kannst Du zwischen Oktetten und Zeichenketten vermitteln.
Grundregel auch: Alles was IO ist, muss als Oktetten vorliegen. Wenn Du einen SvUTF8 mit print auf STDOUT gibts (CGI -> Webserver) kommt ggf. eine Fehlermeldung, auf jeden Fall sind die Umlaute verstümmelt. Vor dem print also den SvUTF8 wieder als Oktetten deklarieren oder dem IO-Layer mitteilen, dass UTF-8 kommt.
Das Thema ist ein bischen komplex, hierzu musst Du noch Einiges an Eigenleistung erbringen ;)
Verwandt damit ist 'use bytes; no bytes;' umschalten zwischen Character- oder Bytesemantic.
In oder aus Richtung mysql ist der SvUTF8 voll kompatibel, so kann Perl mit mysql vollständig zeichenorientiert kommunizieren.
Hotti