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


Автор: slavenk 1.7.2013, 15:31
Здравствуете!
Изучаю главу 6 "Управление сложными структурами данных" книги "Шварц Р., Фой Б., Феникс Т. - Perl. Изучаем глубже. 2-е издание". Столкнулся с такой проблемой: некорректно выводятся данные в кириллице (utf8).

Нашел только костыль для Data::Dumper:

Код

use Data::Dumper;

$Data::Dumper::Useqq = 1;

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


perl debugger (perl -d) и YAML некорректно показывает юникод. Подскажите пожайлуста, как решить данную проблему.

Автор: arto 1.7.2013, 16:02
# perl -CSA -de0
  DB<1> %h = ('a' => "Тест 1", 'b' => "Тест 2")

  DB<2> x \%h
0  HASH(0xac0db0)
   'a' => 'Тест 1'
   'b' => 'Тест 2'
  DB<3> 

или вы имеете ввиду что то иное?

Автор: slavenk 2.7.2013, 10:03
Вот пример:

ex_1.pl

Код

#!/usr/bin/perl -w
use utf8::all;
use feature 'say';

my $test = 'тест';
say $test;


Вывод отладки:

perl -d ex_1.pl 

Loading DB routines from perl5db.pl version 1.37
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(ex_1.pl:5):      my $test = 'тест';
  DB<1> s                                                                                                                                                                          
main::(ex_1.pl:6):      say $test;
  DB<1> x $test                                                                                                                                                                    
0  '\x{0442}\x{0435}\x{0441}\x{0442}'
  DB<2>       

Автор: arto 2.7.2013, 11:17
переопределите как вам надо main::dumpValue():

# perl -d t.pl
main::(t.pl:5): my $test = 'тест';
  DB<1> binmode $DB::OUT, ':utf8' if $DB::OUT;

  DB<2> sub main::dumpValue { print $DB::OUT join "\n", @{ $_[0] }; print $DB::OUT "\n" }

  DB<3> n
main::(t.pl:6): say $test;
  DB<3> x $test
тест

Автор: slavenk 2.7.2013, 14:59
Спасибо большое, заработало.

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