[Vienna-pm] utf8 string als hash-key

max prozessor13 at gmx.net
Sun Sep 20 11:39:20 PDT 2009


hallo..

ich hab mich jetzt die letzten stunden rumgeaergert, weil ein programm  
auf dem test-system funktioniert hat, und am live nicht.

das test-system ist unter os x perl 5.8.9 (installiert mit macports)
am live-system ist es debian-etch perl 5.10.0

hier das test-programm. schaut ziehmlich unsinnig aus, aber es ist  
halt nur das minimal-set.. die logik fehlt klarerweise..

------------------------------------------------------
package X;

use strict;
use Encode qw( _utf8_off _utf8_on );

sub x {
   my %hash = map {
      my $k = $_;
      _utf8_off($k);	# so sollten dann doch einfach die bytes  
verwendet werden
      $k => 'ok';
   } @_;
   # hier braucht irgendeine logic einen hash mit keinen utf8-keys
   # (es kommt sonnst in einer 3rd party lib zu einem fehler)
   foreach (keys %hash) {
      my $k = $_;
      _utf8_on($k);	# und jetzt machen wir wieder utf8-strings daraus
      $hash{$k} = delete $hash{$_};
   }
   # der return-hash soll wieder die originalen keys drinnen haben
   return \%hash;
}

package main;

use strict;
use utf8;
use Data::Dumper;
binmode STDOUT, 'utf8';

my $x = 'öäü';
my $h = X::x($x);
print Dumper($h);
print "\n\ntest: " . $h->{$x} . "\n";
----------------------------------------------------------

der output ist am test-system:

   $VAR1 = {
          "\x{f6}\x{e4}\x{fc}" => 'ok'
        };

   test: ok

und am live-system:

   $VAR1 = {
          "\x{f6}\x{e4}\x{fc}" => 'ok',
        };

   test:

jetzt gibt es fuer mich ein paar unbekannte:

* rechnet perl 5.10.0 richtig
* rechnet perl 5.8.9 richtig
* wieso schreibt Data::Dumper ueberhaupt \x{f6}\x{e4}\x{fc} und nicht  
öäü ... \x{f6} ist doch ein latin1 zeichen??
* wie kann ich das loesen

bitte helft mir.
thx. max.



More information about the Vienna-pm mailing list