如何使用Data :: Dumper显示可读的UTF-8字符串?

Бер*_*ров 6 debugging unicode perl utf-8 data-dumper

我在结构中有一些UTF-8编码的字符串,我倾向于使用Data :: Dumper进行调试.

一个小测试案例是:

use utf8;
use Data::Dumper;
say Dumper({??=>"??"}
Run Code Online (Sandbox Code Playgroud)

它输出

{
  "\x{434}\x{430}" => "\x{43d}\x{435}"
};
Run Code Online (Sandbox Code Playgroud)

但我想看

{
  "??" => "??"
};
Run Code Online (Sandbox Code Playgroud)

当然,我的结构非常复杂.如何在调试时使转储结构中的字符串可读?也许我必须以chr某种方式处理输出warn/say

ern*_*nix 6

仅用于调试:

#!/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 = {
          "??" => "??"
        };

---
??: ??

{
  "??" => "??"
}
Run Code Online (Sandbox Code Playgroud)