Thread Zu perlfaq: "How can I make \w match national character sets?" (10 answers)
Opened by Gast at 2009-10-17 18:05

betterworld
 2009-10-18 15:57
#127078 #127078
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Guest Gast
Habe ich richtig geraten:
beim letzten Beispiel muß ich mit utf-8 encoden, weil setlocale sich nicht auf meine Konsole auswirkt und diese auf utf8 eingestellt ist?

Ja, klingt richtig. Man kann allerdings auch binmode nehmen, dann schreibt sich das say leichter, siehe unten.

Aber warum willst Du eigentlich "use locale" benutzen? Ich schrieb ja oben, dass es ohne einfacher geht:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl -w
use 5.010;
use strict;
use utf8;

my $string = 'abcäöüß'; # Achtung, der Quelltext muss utf8-kodiert sein
my @match = $string =~ /[[:word:]]/g;

if (${^UTF8LOCALE}) { # Erkennt, ob utf8 ausgegeben werden soll

    # Ausgaben nach STDOUT werden nach utf8 konvertiert
    binmode STDOUT, ':encoding(utf8)';
}

say "@match"; # a b c ä ö ü ß


(Ich habe hier trotzdem [[:word:]] statt \w benutzt, da \w offenbar ab 5.12 hier etwas anderes tun soll.)

View full thread Zu perlfaq: "How can I make \w match national character sets?"