Tobias: lc lokalisieren

Hi,

ich habe Probleme der Perl-Funktion lc() beizubringen, daß sie auch meine deutschen Umlaute in Kleinbuchstaben verwandeln soll. Ich habe in der Forums-Auslese, im Forums-Archiv, in meinen 2 Perl-Büchern und in den Man-Pages gesucht, aber leider trotzdem keine brauchbaren Ergebnisse erzielt.

Mein Test-Skript sieht momentan so aus:
--
use POSIX qw(locale_h);

setlocale(LC_CTYPE, "de_DE");

print lc('HÄLLÖ'), "\n";
print 'hällö';
--

anstelle von 'de_DE' habe ich schon 'german', 'ge', 'de' und 'de_DE.ISO8859-1' probiert (bei letzterem ist Perl gleich abgestürzt *g*)

Mache ich irgend etwas falsch? Vielleicht weiß ja jemand genaueres.

Gruß,
Tobias

  1. hi!

    ich habe Probleme der Perl-Funktion lc() beizubringen, daß sie auch meine deutschen Umlaute in
    Kleinbuchstaben verwandeln soll.

    use locale;

    print lc('HÄLLÖ'), "\n";
    print 'hällö';

    bye, Frank!

    1. hi!

      ich habe Probleme der Perl-Funktion lc() beizubringen, daß sie auch meine deutschen Umlaute in
      Kleinbuchstaben verwandeln soll.

      use locale;

      print lc('HÄLLÖ'), "\n";
      print 'hällö';

      Geht leider nicht. Die Ausgabe sieht dann so aus: "hxllÖ".

      Habe übrigens Active Perl und Apache laufen.

      Tobias

      1. hi!

        use locale;

        print lc('HÄLLÖ'), "\n";
        Geht leider nicht. Die Ausgabe sieht dann so aus: "hxllÖ".

        Dann ist dein System vermutlich falsch konfiguriert. Lies dir dazu am besten die passende man-Page durch:
          perldoc locale
          perldoc perllocale

        Ist übrigens auch als HTML-Dokument in ActivePerl enthalten.

        Habe übrigens Active Perl und Apache laufen.

        Ich auch.

        bye, Frank!

        1. Hi,

          Dann ist dein System vermutlich falsch konfiguriert. Lies dir dazu am besten die passende man-Page durch:
            perldoc locale
            perldoc perllocale

          Ist übrigens auch als HTML-Dokument in ActivePerl enthalten.

          Ich weiß :-) Ich habe das ja dort abgeschrieben. Geht nur leider nicht...
          Und ehrlich gesagt wüßte ich nicht, wo ich irgendetwas konfigurieren könnte...

          Tobias

        2. Hallo zusammen,

          Auf Linux mit 5.005_2 sieht die Ausgabe vom Originalscript und von der normalen use locale version merkwürdigerweise so aus:

          hÄllÖ
          hällö

          Merkwürdig, irgendeine Ahnung?
          Oder bin ich nur wieder in irgendeine Falle getappt? ;-)

          sehr verwundert

          Christoph

          1. hi!

            Auf Linux mit 5.005_2 sieht die Ausgabe vom Originalscript und von der normalen use locale version
            merkwürdigerweise so aus:

            hÄllÖ
            hällö

            Merkwürdig, irgendeine Ahnung?
            Oder bin ich nur wieder in irgendeine Falle getappt? ;-)

            Nein, so ist es genau richtig.

            bye, Frank!

            1. Hallo Frank,

              Nein, so ist es genau richtig.

              D.h. lc() wandelt keine Umlaute um?
              Ist aber auch nicht gerade nett von ihm.
              Irgendein _simpler_ Workaround oder nur den "harten" Weg?

              Moment, mit use locale geht es doch (Irrtum von mir, Änderung wohl nicht gespeichert, sorry)
              Nur mit dem Ursprungsscript klappt es nicht, da werden die Umlaute nicht klein.
              Die Fehlerursache interessiert mich jetzt doch.
              Sollte das zu sehr in die Abgründe von Perl gehen und deshalb evt OT werden, auch per PM.

              so short

              Christoph

              1. Hi,

                D.h. lc() wandelt keine Umlaute um?
                Ist aber auch nicht gerade nett von ihm.

                Der Punkt ist, daß *Du* Deine Anforderung so formulieren mußt, daß Perl versteht, was Du meinst. Was genau ist für *Dich* ein Umlaut? In welcher Sprache sprichst Du? Das mußt Du Perl irgendwie vermitteln, und Perl muß demzufolge die Menge der umzusetzenden "Buchstaben" Deinen Anforderungen anpassen.

                Unter UNIX ist es üblicherweise die Environment-Variable $LANG, in welcher man solche Informationen in standardisierter Form ablegen kann - aber Du mußt Perl offenbar auch noch motivieren, diese zu lesen und damit seine eingebauten Default (welche in Deinem Fall nicht für Umlaute auszureichen scheinen) zu überdecken. Genau das scheint mir "use locale" zu tun (ohne daß ich jetzt in die Doku geschaut hätte).

                mfG - Michael (der gestern dasselbe Problem hatte, es aber erst mal liegen gelassen hat, weil anderes wichtiger war - danke, Frank!)