Moin, Am Fre, 2003-07-18 um 22.31 schrieb David Haller:
On Fri, 18 Jul 2003, Joerg Rossdeutscher wrote:
Nichtsdestotrotz: Ich stelle mal das perl -V von meinem Debian dazu, vielleicht seid ihr ja heller als ich. Allerdings wären das dann _vermutlich_ alles Versionen, auf denen ich das Problem nicht habe, es scheint begrenzt zu sein auf die allerneuesten Distris. Wenn hier jemand Suse 8.2 einsetzt UND(!) $LANG auf irgendwas.UTF8 stehen hat, könnte derjenige vielelicht die Ausgabe von perl -V dazustellen? Danke!
Kann ich mal mit SuSE 8.2 und nem verkorksten Woody testen...
Achso, 'perl -V' ist eher weniger aussagekraeftig.
Sah für mich auch so aus.
1. Hast du mal was, was mit LANG="foo" (foo !~ /\.UTF.*/), funktioniert und mit LANG="*.UTF*" nicht? So dass wir konkret testen koennen?
Leider nicht - das ist das Problem: Hier geht alles. Wie gesagt, ich würde ja gerne mein perl so konfigurieren, daß es hier _nicht_ mehr geht, damit ich den Code schrubben kann, damit er wiederum überall funktioniert. Mein Eindruck ist der folgende: Ich lade sagenwirmal 5 Bytes binäre Daten in einen Skalar. Das enthält dann sowas: ".a_cb Um den binären Wert des Zeichens an der vierten Stelle rauszukriegen, habe ich sowas gemacht: print ord(substr($data,3,1)); Ergibt den Bytewert von "c". Es scheint aber so zu sein, daß, wenn perl auf utf8 voreingestellt ist UND zufälligerweise "a_" einen utf8-Code darstellt, daß diese beiden Zeichen dann als eines gezählt werden und der Zugriff auf das vierte Zeichen dann "b" erwischt. Natürlich basiert das ganze Problem darauf, daß ich in meinem jugendlichen Leichtsinn mit Textfunktionen auf binäre Daten losgehe. Ich kanns halt nicht besser. Kann man perl irgendwie verklüsen, daß eine Variable kein "Text" ist sondern ein "Array of Bytes", sprich: Ohne Encoding ist? Ich habe sowas wie oben inzwischen auf "unpack" umgestellt, mangels Problemen kann ich nicht sagen, ob es besser läuft.
2. Aussagekraeftig bzgl. der perl-config ist die Ausgabe von:
perl -MConfig -e 'print Config::config_sh();'
Himmel! Hölle! Mehr nicht? Das kann ich aber hier nicht posten... %-) Ich habe aber mal etwas rumgegrept ("utf", "char" , "byte",...) und sowas gefunden: i8type='char' netdb_name_type='const char *' stdchar='char' u8type='unsigned char'
Mein (etwas defektes) perl hat z.B. u.a.: ivtype='long long' nvtype='long double'
ivtype='long' nvtype='double'
3. ich habe den leisen Verdacht, dass es evtl. eher mit den Unicode::* Modulen zusammenhaengen koennte, denn perl selbst kann AFAIK kein Unicode/UTF*. Interessant koennte z.B. die Ausgabe von
$ echo 'i Unicode::MapUTF8' | perl -MCPAN -e'shell' | grep VERSION CPAN_VERSION 1.09 INST_VERSION 1.09
Da das Programm mit binären Daten jongliert, habe ich eigentlich gar keine Unicode-Sachen eingebettet. Brauche ich ja nicht. Obiges Kommando ergibt bei mir nur eine leere Zeile... Igitt, ach so, geht nur als root, und der grep verspeist diese Warnung. OK. Also: CPAN_VERSION 1.09
sein. Auch noch die Versionen von anderen Modulen koennten interessant werden... (Unicode::Normalize z.B.)
$ echo 'i utf8' | perl -MCPAN -e'shell' | grep VERSION CPAN_VERSION 1.00 INST_VERSION 1.00
CPAN_VERSION 1.00 INST_VERSION 1.00 Hmm... Ich finde den Ansatz oben mit der "Config" interessant, da wird's wohl liegen. Ist das irgendwo dokumentiert? Der Kram unter http://theoryx5.uwinnipeg.ca/mod_perl/cpan-search?new=Search;site=ftp.funet.... scheint alles nicht zu passen. Seufz. Ich glaube, ich muß den Suse-8.2-Karton aufmachen. :-) Gruß, Ratti -- -o) fontlinge | Font management for Linux | Schriftenverwaltung in Linux /\\ http://freshmeat.net/projects/fontlinge/ _\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/