[Vienna-pm] utf8 string als hash-key
max
prozessor13 at gmx.net
Mon Sep 21 10:25:21 PDT 2009
>>> Was tut:
>>> %hash=map { utf8::upgrade(my $k=$_); $k => $hash{$_} } keys %hash;
>>> $rdb->mget(\%hash); # Verliert utf8-Flag
>>> %hash=map { _utf8_on(my $k=$_); $k => $hash{$_0} } keys %hash;
>> bleibt haengen... geiches passiert bei "normalen" utf8 strings
>> (wohlgemerkt nur unter perl5.10)
>
> Bei welcher Zeile?
kann ich nicht sagen. das TokyoTyrant modul ist nicht von mir, und es
bleibt in dem modul haengen! vielleicht kommt bei der client-server
verbindung das protokoll mit den utf8 zeichen durcheinander... k.a.
> Abgesehen von perl5.10 Seltsamkeiten verwurschtelt dein Modul
> definitiv das utf8-Flag. Also mal ein Fehler des Moduls!
> Wenn es denn nicht gebe, wärst Du mit den perl5.10 Problemen
> nicht in Kontakt gekommen.
das stimmt, aber andererseits verwurschtelt das TokyoTyrant modul
definitv auch das flag, und darum hab ich erst zum wurschteln
angefangen :)
>> die use bytes directive ist fuer das ganze TokyoTyrant package
>> eingeschalten, und darin wird dann extrem viel mit pack, unpack usw
>> gemacht. das ist mir irgendwie zu heiss, da was anzufassen.
>
> Na ja, man könnte auch innerhalb von mget "no bytes;" einfügen.
> Aber das ist trotzdem Glückssache wegen xs.
>
> # Oder im eigen Modul dies einfügen (untestet)
> { package TokyoTyrant; # oder wie auch immer es heißt.
> my $org_mget=\&TokyoTyrant::mget;
> no warnings 'redefine';
> sub mget : method { no bytes; shift()->$org_mget(@_) };
> }
w.g. es klappt mit encode("UTF-8", ...) jetzt eh, und darum werd ich
das fremde modul das fremde modul bleiben lassen.
> Oder es gibt ohnehin eine neuere Version dieses Moduls‽
nein.. leider nicht.
thx u. lg. max.
More information about the Vienna-pm
mailing list