Robert Allerstorfer: pattern matching mit umlauten

Hi,

bin auf ein problem mit folgendem perl code gestossen:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
$_ = "KLÄNGE Klänge";
$term = "e";
$n = @matches = /$term/ig;
print "$term kommt in "$_" $n mal vor";

Dieses kleine CGI-script gibt völlig richtig aus:
e kommt in "KLÄNGE Klänge" 2 mal vor
da das matching case-insensitiv erfolgt.
Nimmt man statt e allerdings den Umlaut ä, also $term = "ä", erfolgt die suche seltsamerweise nicht mehr case-insensitive, sodass nur das kleine ä, nicht aber das große Ä gefunden wird. =>
ä kommt in "KLÄNGE Klänge" 1 mal vor

Ist das ein Perl-fehler oder kennt jemand einen workaround?

danke,
rob.

  1. Hi,

    Nimmt man statt e allerdings den Umlaut ä, also $term = "ä",
    erfolgt die suche seltsamerweise nicht mehr case-insensitive,
    sodass nur das kleine ä, nicht aber das große Ä gefunden wird. =>
    ä kommt in "KLÄNGE Klänge" 1 mal vor

    Ist das ein Perl-fehler oder kennt jemand einen workaround?

    klaro ,)

    $term = lc $term;

    einfach kleinmachen und dann durchsuchen ,)

    mfg
    CK1

  2. Nimmt man statt e allerdings den Umlaut ä, also $term = "ä", erfolgt die suche seltsamerweise nicht mehr case-insensitive, sodass nur das kleine ä, nicht aber das große Ä gefunden wird. =>
    ä kommt in "KLÄNGE Klänge" 1 mal vor

    Ist das ein Perl-fehler oder kennt jemand einen workaround?

    Nein, kein Fehler. Lies "perldoc perllocale"

    Peter

    1. Hi,

      Nimmt man statt e allerdings den Umlaut ä, also $term = "ä", erfolgt die suche seltsamerweise nicht mehr case-insensitive, sodass nur das kleine ä, nicht aber das große Ä gefunden wird. =>
      ä kommt in "KLÄNGE Klänge" 1 mal vor

      Ist das ein Perl-fehler oder kennt jemand einen workaround?

      Nein, kein Fehler. Lies "perldoc perllocale"

      Gut, d.h. die lösung ist

      use locale;

      am anfang zu plazieren, dann funktionierts...

      ciao,
      rob.