Probleme mit utf

Probleme mit utf

am 10.03.2005 17:47:23 von Maros Kollar

Hallo,

ich habe ein seeehr seltsammes Problem mit utf und perl 5.6.1 (um genau
zu sein mit der Datei utf8_heavy.pl):

Manchmal (sprich "nicht immer", wobei ich allerdings nicht weiss wovon
dieses ominöse 'manchmal' abhängt) wenn ich die Zeile 'lc($sting1) eq
lc($string2)' ausführe kommt es zu einer Fehlermeldung weil das uft8
Package (/usr/lib/perl5/5.6.1/utf8_heavy.pl) die Funktion 'ToLower' in
meinem Package ausführen will, wo diese Funktion natürlich nicht
implementiert ist.

Eine Auswertung des caller Stacks hat Folgendes ergeben:

1. MEINMODUL::meinefunktion ruft "lc($string)" auf.
2. utf8::SWASHNEW wird aufgerufen
3. In der Zeile 30 ruft der Code 'eval { $caller->$type(); }' wiederum
die Funktion MEINMODUL::ToLower auf
(4. Da es diese Funktion nicht gibt wird AUTOLOAD aufgerufen wo es dann
zu einer Fehlermeldung kommt)

Dieser Fehler tritt anscheinend auch auf wenn ich $sting1 =~
s/^$string2$/i; ausführe.

beste grüße
Maros

Re: Probleme mit utf

am 10.03.2005 22:31:21 von Slaven Rezic

Maros Kollar writes:

> Hallo,
>
> ich habe ein seeehr seltsammes Problem mit utf und perl 5.6.1 (um
> genau zu sein mit der Datei utf8_heavy.pl):
>
> Manchmal (sprich "nicht immer", wobei ich allerdings nicht weiss wovon
> dieses ominöse 'manchmal' abhängt) wenn ich die Zeile 'lc($sting1) eq
> lc($string2)' ausführe kommt es zu einer Fehlermeldung weil das uft8
> Package (/usr/lib/perl5/5.6.1/utf8_heavy.pl) die Funktion 'ToLower' in
> meinem Package ausführen will, wo diese Funktion natürlich nicht
> implementiert ist.
>
> Eine Auswertung des caller Stacks hat Folgendes ergeben:
>
> 1. MEINMODUL::meinefunktion ruft "lc($string)" auf.
> 2. utf8::SWASHNEW wird aufgerufen
> 3. In der Zeile 30 ruft der Code 'eval { $caller->$type(); }'
> wiederum die Funktion MEINMODUL::ToLower auf
> (4. Da es diese Funktion nicht gibt wird AUTOLOAD aufgerufen wo es
> dann zu einer Fehlermeldung kommt)
>
> Dieser Fehler tritt anscheinend auch auf wenn ich $sting1 =~
> s/^$string2$/i; ausführe.
>

Wenn du mit Perl und utf-8 arbeiten willst, solltest du die Version
5.8.x verwenden. 5.6.x hat bekanntermassen zu viele Bugs.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

Lost in your Tk widget tree? Try
http://user.cs.tu-berlin.de/~eserte/src/perl/Tk-WidgetDump/

Re: Probleme mit utf

am 11.03.2005 00:24:41 von Maros Kollar

Hallo,

> Wenn du mit Perl und utf-8 arbeiten willst, solltest du die Version
> 5.8.x verwenden. 5.6.x hat bekanntermassen zu viele Bugs.

das ist mir bewußt, und privat benutze ich auch nur Perl 5.8.x. Dieses
Problem tritt aber auf einem Server eines Kunden auf der schon teilweise
in Produktion steht; daher bin ich leider an 5.6.1 gebunden.

Irgendwelche Ideen wie ich diesen Fehler mit den gegebenen Restriktionen
umgehen kann?

beste grüße
Maros

Re: Probleme mit utf

am 11.03.2005 08:55:02 von Slaven Rezic

Maros Kollar writes:

> Hallo,
>
> > Wenn du mit Perl und utf-8 arbeiten willst, solltest du die Version
> > 5.8.x verwenden. 5.6.x hat bekanntermassen zu viele Bugs.
>
> das ist mir bewußt, und privat benutze ich auch nur Perl 5.8.x. Dieses
> Problem tritt aber auf einem Server eines Kunden auf der schon
> teilweise in Produktion steht; daher bin ich leider an 5.6.1 gebunden.
>
> Irgendwelche Ideen wie ich diesen Fehler mit den gegebenen
> Restriktionen umgehen kann?
>

Hast du AUTOLOAD in deinem Package definiert? Ich kann merkwürdiges
Verhalten mit perl5.6.1 und dem folgenden Skript reproduzieren:

sub AUTOLOAD {
warn $AUTOLOAD;
exit;
}

$x = "\x{010c}";
$x = lc($x);
print $x, "\n";
__END__

Wenn das bei dir auch der Fall ist, dann solltest du versuchen, den
Aufruf des AUTOLOADs zu vermeiden. In diesem Fall hilft es, wenn man
etwas wie "die if $AUTOLOAD =~ /::ToLower/" schreibt.

Aber wenn ernsthaft mit utf8 gearbeitet werden soll, führt kein Weg an
perl5.8.x vorbei. Und auch dort sollte man stets die neueste
Unterversion von Perl installiert haben.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de
babybike - routeplanner for cyclists in Berlin
handheld (e.g. Compaq iPAQ with Linux) version of bbbike
http://bbbike.sourceforge.net