Почему 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');

Комментарии

  1. (#)   Дмитрий:

    спасибо за ответ бро )


  2. (#)   Андрей:

    Спасибо за подробное объяснение! Все помогло.


  3. (#)   Анатолий:

    Спасибо за пример использования!


  4. (#)   Владимир:

    Спасибо за то, что ты есть!


Оставить комментарий

Ответ на Почему Perl предупреждает "Wide character in print"?