Hmm ok, fang ich am besten mal von vorn an.
Fakten :
Perl in Version 5.8.5 liegt vor
FreeBSD in Version 4.7
Bei der Software handelt es sich um ein Shop - Sytsem, das mit Perl zusammenarbeitet, bzw. dessen Module zum Teil in Perl geschrieben wurden.
Das Shop - Sytsem verwendet für die Suche nach Artikelinformationen einen RegEx und hängt ein i an den Ausdruck, wenn die Suche Groß- und Kleinschreibung ignorieren soll.
Der RegEx wird dann zusammen mit einem use locale in einem eval - Block hinterlegt.
Folglich sollte man das Verhalten der Suche mit einem eigenen RegEx nachbilden können und die selben Ergebnisse erhalten.
Beispiel - Skript :
--snip--
#!/usr/bin/perl
use locale;
my $file = '/data/foo.txt';
my $pushkin_small = 'ïóøêèÃ';
my $pushkin_normal = 'ÃóøêèÃ';
my $data = LoadFile($file);
my $count_normal = 0;
my $count_small = 0;
foreach my $line (@{$data}) {
$count_normal++ if ($line =~ /$pushkin_normal/isg);
$count_small++ if ($line =~ /$pushkin_small/isg);
}
print "Match for small : $count_small\n";
print "Match for normal : $count_normal\n\n";
exit(0);
sub LoadFile {
my $file = shift(@_);
my @value = ();
open(FILE, "<$file");
@value = <FILE>;
close(FILE);
chomp(@value);
return \@value;
}
--snap--
Anmerkung :
LC_CTYPE und LC_COLLATE sind auf ru_RU.KOI8-R gesetzt
Gehen wir mal davon aus das das Wort Pushkin in 30 Zeilen der Datei /data/foo.txt vorkommt, so müßte mir als Ergebnis für beide Zähler jeweils 30 rauskommen.
In wirklichkeit erhalte ich ein Ergebnis das wie folgt aussieht :
Match for small : 9
Match for normal : 30
Die Frage ist jetzt, ob die Ursache des Problems bei Perl, oder im OS zu suchen ist.
Grüße,
BB
P.S.:
Ich habe das ganze auch auf ein FreeBSD 4.10 getestet, mit dem gleichen Ergebnis.
Laut Aussagen eines der Beteiligten lief das ganze bereits mal unter FreeBSD 4.7 ohne Fehler.