Bei mir kommt das erwartetet raus:
use strict;
use warnings;
use utf8;
my $test = "äasdfsf";
print "MATCH A\n" if($test =~ /^[ÄÖÜ]/);
print "MATCH B\n" if($test =~ /^[äüö]/);
print "MATCH C\n" if($test =~ /^[ÄÜÖ]/i);
Unter welcher Kodierung hast du das Script es gespeichert? Woher kommt der zu testende String? Richtig funktioniert das mit den Umlauten erst, wenn der zu testende String und die Regexp in der selben ISO-8859-X Kodierung sind, oder besser in der Perl-internen Kodierung.
Wenn du den Code als UTF-8 gespeichert hast, und keine
use utf8 benutzt nimmt Perl die Bytes und nicht die Byte-Paare in der Regexp. Dann Passiert das von dir beschriebene.
Also Immer schön
use utf8 benutzen und alle eingaben Dekodieren. Entweder mit
Encode oder beim open
:encoding(...)
Last edited: 2013-07-20 10:58:01 +0200 (CEST)