Gregor: tr// zählt Umlaute doppelt

Hallo,

ich versuche ein kleines Script zu schreiben, das die Häufigkeit einzelner Zeichen in einem Text zählt. Mit tr/// klappt das wunderbar, es sei denn es sind Umlaute...die werden scheinbar doppelt gezählt

  
#!/usr/bin/perl -w  
  
use strict;  
use diagnostics;  
use locale;  
  
use POSIX qw(locale_h);  
setlocale(LC_ALL,'de_DE');  
  
my ($string, $number);  
  
$string="ÄÄÄäää";  
  
$number=$string=~tr/Ää//;  
  
print "\n$number\n";

Das Ergenbnis ist 12.

Ich habe es auch (wie man sieht) mit Locales versucht...ist tr/// die falsche Methode?

Viele Grüße

Greg

  1. (Hallo|Hi(ho)|Nabend) Gregor,

    ich versuche ein kleines Script zu schreiben, das die Häufigkeit einzelner Zeichen in einem Text zählt. Mit tr/// klappt das wunderbar, es sei denn es sind Umlaute...die werden scheinbar doppelt gezählt

    Weil sie wahrscheinlich in UTF-8-Kodierung vorliegen und du das dem Perl-Skript nicht mitgeteilt hast?

    #!/usr/bin/perl -w

    use strict;
    use diagnostics;
    use locale;

    [code lang=perl]
    use utf8;

    würde ich als sinnvoller erachten ...  
      
    MffG  
    EisFuX
    
    -- 
    [Nichts ist dem Zuwachs an Wissen förderlicher, als nach einer Antwort korrigiert zu werden.](http://community.de.selfhtml.org/zitatesammlung/zitat119)
    
    1. Was du sagst, ist korrekt.

        
      
      > perl -E'say "ÄÄÄäää" =~ tr/Ää//;'  
      
      12  
      
      > perl -E'use utf8; say "ÄÄÄäää" =~ tr/Ää//;'  
      
      6  
      
      
      1. Ahoihoi!

        Danke für eure Antworten, das hat fast wunderbar funktioniert... ;). Mein eigentliches Script liest die Zeichen aus einer Datei (d.h. einen Text). Dabei werden die Umlaute nun einfach mal garnicht mehr gezählt. Der Text in der Datei ist auch in utf8 gespeichert. Habe ich vielleicht noch etwas übersehen?
        Hier mal der Link auf das Script (auf codepad):
        script
        Der Text an sich ist ein simpler deutscher Text. Ich hoffe, das ganze liegt nicht bloß an einem Tippfehler im Script, aber je länger ich da drauf schaue, desto weniger sehe ich :)

        Viele Grüße

        Greg

        1. Mein eigentliches Script liest die Zeichen aus einer Datei (d.h. einen Text). Der Text in der Datei ist auch in utf8 gespeichert. Habe ich vielleicht noch etwas übersehen?

          Ja ;-) Perl ist sich dessen in Deinem Script nicht bewusst ;-)

          http://perldoc.perl.org/perluniintro.html#Unicode-I/O

          1. http://perldoc.perl.org/perluniintro.html#Unicode-I/O

            Hallo,

            danke. Nun funktioniert es wunderbar, auch mit Textdatei.

            Dann mal noch einen schönen Sonntag und vielen Dank für die nette Hilfe von euch!

            Greg