Как отобразить читаемые строки UTF-8 с помощью Data :: Dumper? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть некоторые строки в кодировке UTF-8 в структурах, которые я выгружаю для отладки с помощью Data :: Dumper .

Небольшой тестовый пример:

use utf8;
use Data::Dumper;
say Dumper({да=>"не"}

Он выводит

{
  "\x{434}\x{430}" => "\x{43d}\x{435}"
};

, но я хочу увидеть

{
  "да" => "не"
};

Конечно, моя структура довольно сложна.Как я могу сделать строки в структуре дампа читаемыми во время отладки?Может быть, мне нужно как-то обработать вывод через chr до warn/say?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

извините, но я проверил eval целый дамп и получил отвращение к моим данным, поэтому

Data::Dumper->new(\@_)
  ->Indent(1)->Sortkeys(1)->Terse(1)->Useqq(0)->Dump
  =~ s/((?:\\x\{[\da-f]+\})+)/eval '"'.$1.'"'/eigr;
0 голосов
/ 24 мая 2018

Только для отладки:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
use utf8;
use Data::Dumper;
binmode STDOUT, ':utf8';

CASE_1: {
    # Redefine Data::Dumper::qquote() to do nothing
    no warnings 'redefine';
    local *Data::Dumper::qquote = sub { qq["${\(shift)}"] };
    # Use the Pure Perl implementation of Dumper
    local $Data::Dumper::Useperl = 1;

    say Dumper({да=>"не"});
}

CASE_2: {
    # Use YAML instead
    use YAML;
    say Dump({да=>"не"});
}

CASE_3: {
    # Evalulate whole dumped string
    no strict 'vars';
    local $Data::Dumper::Terse = 1;

    my $var = Dumper({да=>"не"});
    say eval "qq#$var#" or die $@;
}

__END__
$VAR1 = {
          "да" => "не"
        };

---
да: не

{
  "да" => "не"
}
...