[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