[Vienna-pm] utf8 string als hash-key

Josef e9427749 at stud4.tuwien.ac.at
Mon Sep 21 06:34:16 PDT 2009


Hi, allerseits!

max schrieb:
> keine schleche idee!, aber Wolfgang Laun hat mir grad eben schon den 
> entscheidenden tip gegeben. naemlich

Nun ja, da hättest Du auch mein Posting lesen können. ;-/
(Latin1 wäre wichtig gewesen, wenn die andere Lib selber auf Werte
  mit bestimmten Schlüsseln zugreift. Diesbezügl. hattest Du Dich
  noch nicht geäußert gehabt. UTF-8 hat den Vorteil das alle Zeichen
  drin Platz haben.)

Zu Deinem Ausgangspunkt noch ein paar Fragen.

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;

Und was tut:
  %hash=map { encode('iso-8859-1',$_) => $hash{$_} } keys %hash;
  # ^- nur Latin1, kein Flag
  $rdb->mget(\%hash);
  # solange nur latin1-Zeichen sollte es passen.

Und drittens:
   Falls deine Lib reines Perl ist, schau ob dort irgendwo
   "use bytes;" steht und kommentier das mal testweise aus.
   Vielleicht erübrigt sich dann Dein Workaround, um den
   Workaround der Bibl. für ältere Perls.

Noch ein paar Fragen:
- Taintmode?
- PERL_UNICODE Umgebungsvariable?
- Insbesondere Unterschiede zw. den Systemen?

ciao,
   Josef

PS: utf8::upgrade($_) for keys %hash;
     geht für values aber nicht für keys.


More information about the Vienna-pm mailing list