В моем коде есть символы utf8. Поэтому я делаю:
use utf8;
my $line = 'ЗГ. РАХ. №382 ВIД 03.02.2020Р';
print $line; # Wide character in print at ...
Тогда я подумал, что мой STDOUT должен быть в utf8
:
use utf8;
use open IO => ':utf8 :std';
my $line = 'ЗГ. РАХ. №382 ВIД 03.02.2020Р';
print $line; # Wide character in print at ...
Почему, когда я говорю perl, использовать utf8
в то время как мой источник код содержит utf8
символов Я получаю ошибку?
В то же время:
Нет ошибок:
my $line = 'ЗГ. РАХ. №382 ВIД 03.02.2020Р';
print $line;
Нет ошибок:
use open IO => ':utf8 :std';
my $line = 'ЗГ. РАХ. №382 ВIД 03.02.2020Р';
print $line;
Как мне открыть свои файловые дескрипторы и правильно работать с utf8
?
UPD
На самом деле у меня есть этот код. Это не соответствует:
use open IO => ':utf8 :std';
my $line = 'ЗГ. РАХ. №382 ВIД 03.02.2020Р';
my @match = $line =~ m/(вiд|от|від)/i;
print "$line -> $1 \n";
К сожалению, регулярное выражение не соответствует. Вывод:
ЗГ. РАХ. №382 ВIД 03.02.2020Р ->
Затем я добавляю utf8
Прагма:
use utf8;
use open IO => ':utf8 :std';
my $line = 'ЗГ. РАХ. №382 ВIД 03.02.2020Р';
my @match = $line =~ m/(вiд|от|від)/i;
print "$line -> $1 \n";
Теперь регулярное выражение сопоставляется, но выдается предупреждение
Wide character in print at t2.pl line 17.
ЗГ. РАХ. №382 ВIД 03.02.2020Р -> ВIД