Почему Perl предупреждает "Wide character in print"?
Это означает, что функция print
в вашей программе выводит на экран данные из строк различных типов.
Дело в том, что в языке Perl существуют строки двух типов. Первый тип хранит последовательности байт, а второй – цепочки символов (символ может состоять из одного или нескольких байт). Второй тип строк был придуман для реализации UTF-8 в языке Perl и отличается от первого наличием скрытого флага.
Обычно в терминологии Perl «wide characters» означают символы UTF-8, а варнинг «Wide character in print» означает, что в файловый дескриптор напечатаны данные с UTF-флагом.
Решений проблемы несколько, выбирайте наиболее удобный:- самое правильное – хранить все в одном формате;
- самое эффективное – подавить вывод предупреждений (
no warnings 'layer'
); - используя
open
илиbinmode
указать адекватную кодировку для файлового дескриптора.open
подойдет для открываемых файлов,binmode
– для уже открытых дескрипторов типа STDOUT. Тут главное не перемудрить, а то может абракадабра получиться; - следить за тем, что печатается, и убирать флаг когда необходимо.
А я предпочитаю использовать третий вариант и первые строки кода у меня выглядят примерно так:
#!/usr/bin/perl
use strict;
use utf8;
binmode(STDOUT,':utf8');
(#) Дмитрий:
спасибо за ответ бро )
(#) Андрей:
Спасибо за подробное объяснение! Все помогло.
(#) Анатолий:
Спасибо за пример использования!
(#) Владимир:
Спасибо за то, что ты есть!