Код: Выделить всё
use strict;
## use utf8;
use locale;
my $RE = '^([[:graph:]]+)';
while ( $STR = <> )
{
chomp( $STR );
print "-$STR\n";
my $matches = ( $STR =~ m/$RE/ );
print $matches ? "matches\n" : "not matches\n";
}Когда на вход подается латиница, всё работает правильно. Но если есть кирилица в utf-8, регулярное выражение не узнаёт графические символы.
Пробовал включать прагму "use utf8", use POSIX qw(locale_h), setlocale( LC_ALL, "" ), setlocale( LC_ALL, "ru_RU.UTF-8" ), -- всё это в различных комбинациях. Не помогает.
Работает выражение $RE = '^(\p{IsGraph}+)'. Но документация говорит, что "use locale" должно заставлять Perl работать в текущей локали, и POSIX-классы должны пониматься.
Что не верно в моём фрагменте?
Системная локаль ru_RU.UTF-8, LC_ALL="".