Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Data::Dumper и utf8, Юникодные символы в сложных структурах 
:(
    Опции темы
Sugar84
Дата 2.12.2010, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.5.2010

Репутация: нет
Всего: нет



Привет всем!

Как известно, 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, и наткнулся на занимательный хак. Подправил скрипт:

Код

#!/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, один чувак утверждает, что на 5.10.0 у него это работает.

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

Заранее благодарен за любую помощь
PM MAIL   Вверх
ginnie
Дата 2.12.2010, 20:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



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


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
arto
Дата 2.12.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



# print 'ываыва' 'фа' 'фыва' | perl -MData::Dumper -lne '$a = [ split "\\s+" ]; print Dumper $a'
$VAR1 = [
          'ываыва',
          'фа',
          'фыва'
        ];
# perlversion Data::Dumper
Data::Dumper: 2.128

PM MAIL ICQ   Вверх
Sugar84
Дата 3.12.2010, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.5.2010

Репутация: нет
Всего: нет



ginnie
Спасибо! Увидел, исправил - заработало!  smile 

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

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

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

У меня это тоже работает (кстати обновил-таки Dumper до 2.128. Но из скрипта, без всяких фокусов, все равно выдает escape-последовательности.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1084 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.