Сопоставление международных (т.е. не ASCII) символов довольно сложно и может зависеть от многих вещей. Проверьте этот пример:
#!perl -w
use strict;
use utf8;
my $string = "ä";
print "matched :alpha:\n" if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n" if $string =~ /[a-z]/i;
print "matched [A-z]\n" if $string =~ /[A-z]/;
Для меня это приводит к
matched :alpha:
Если вы удалите use utf8
, то ни одно из регулярных выражений не совпадет.
Глядя на этот очень важный вопрос , похоже, что вы, вероятно, хотите use utf8
и посмотрите Unicode :: Semantics .
Конечно, если вы используете прямые символы ASCII, то подойдет любое из вышеупомянутых регулярных выражений.