Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Data::Dumper и utf8


Автор: Sugar84 2.12.2010, 19:43
Привет всем!

Как известно, Data::Dumper не выводит utf8 символы, допустим такой код:
Код

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use utf8;
  
my $x = [ qw(ываыва фа фыва) ];
print Dumper $x;


Выводит такую чушь:
Код

$VAR1 = [
          "\x{44b}\x{444}\x{432}\x{444}",
          "\x{444}\x{432}\x{44b}\x{444}\x{432}",
          "\x{44b}\x{432}\x{444}\x{432}"
        ];



Но так как мне необходим способ заставить дампер показывать юникодные символы, то я пошел в гугл, вбил Data::Dumper+utf8, и наткнулся на занимательный http://www.perlmonks.org/?node_id=759465. Подправил скрипт:

Код

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use utf8;

$Data::Dumper::Useqq = 1;

{ no warnings 'redefine';
    sub Data::Dumper::qqoute {
        my $s = shift;
        return "'$s'";
    }
}

my $x = [ qw(ыфвф фвыфв ывфв) ];
print Dumper $x;


Но код выводит такую же чушь. Проверял я на 5.8.9, один чувак http://www.bloged.org/2010/11/datadumper-tf-8.html, что на 5.10.0 у него это работает.

Народ, проверьте, пожалуйста, у кого на какой версии это работает. Или подскажите более элегантный способ дампить юникодные символы в сложных структурах.

Заранее благодарен за любую помощь

Автор: ginnie 2.12.2010, 20:13
Sugar84, можно попробовать исправить Data::Dumper::qqoute на Data::Dumper::qquote.

Автор: arto 2.12.2010, 22:48
# print 'ываыва' 'фа' 'фыва' | perl -MData::Dumper -lne '$a = [ split "\\s+" ]; print Dumper $a'
$VAR1 = [
          'ываыва',
          'фа',
          'фыва'
        ];
# perlversion Data::Dumper
Data::Dumper: 2.128
# 

Автор: Sugar84 3.12.2010, 09:58
ginnie, 
Спасибо! Увидел, исправил - заработало!  smile 

Это ж надо быть таким остолопом =((, вчера весь вечер просидел, чего только не навыдумавал, сегодня с утра пришел, сразу в глаза бросилось...
Эх, не зря говорят: "Утро вечера мудренее"! =)

Ну ладно, пусть тема висит, может кому этот грязный хак пригодится. Хотя, наверно, лучше этим не злоупотреблять.

Добавлено через 3 минуты и 38 секунд
arto: 
# print 'ываыва' 'фа' 'фыва' | perl -MData::Dumper -lne '$a = [ split "\\s+" ]; print Dumper $a'

У меня это тоже работает (кстати обновил-таки Dumper до 2.128. Но из скрипта, без всяких фокусов, все равно выдает escape-последовательности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)