1

連想配列の内容を出力したいと思います。このために、Data::dumper を使用しています。

したがって、たとえば、連想配列が「%w」と呼ばれる場合、次のように記述します。

  print OUT Dumper(\%w);

ここに問題があります。「r\x{e9}​​cente」と出力される「récente」のような単語があります。

私がちょうど書くなら:

print OUT %w;

私は問題ないので、「récente」は「récente」として出力されます。

スクリプトに使用されるすべてのテキスト ファイルは utf8 です。さらに、モジュール「utf8」を使用し、常に文字エンコーディング システムを指定します。

たとえば。:

open( IN, '<', $file_in);
binmode(IN,":utf8");

この問題は Data::dumper に関連していると確信しています。これを解決する方法、または連想配列の内容を出力する別の方法はありますか?

ありがとうございました。

4

4 に答える 4

4

これは意図的なものです。による出力は、Perl コードとして使用しData::Dumperた場合と同じデータ構造を生成することを目的としています。eval文字エンコーディングの効果を制限するために、ASCII 以外の文字はエスケープを使用してダンプされます。それに加えて、$Data::Dumper::Useqq = 1印刷できない文字がエスケープを使用してダンプされるように設定することは賢明です。

Data::Dumperは、データ構造を表示する方法を意図したものではありません。特定のフォーマット要件がある場合は、必要なコードを自分で記述してください。例えば

use utf8;
use feature 'say';
open my $out, ">:utf8", $filename or die "Can't open $filename: $!";
my %hash = (
    bárewørdş => '–Uni·code–',
);

say { $out } "{";
for my $key (sort keys %hash) {
    say { $out } "  $key: $hash{$key}";
}
say { $out } "}";

生産する

{
  bárewørdş: –Uni·code–
}
于 2014-04-01T09:48:00.713 に答える
2

Data::Dumper::AutoEncodeも使用できます。

use utf8;
use Data::Dumper::AutoEncode;

warn eDumper($hash_ref);

cpan Data::Dumper::AutoEncode

于 2014-04-01T09:59:15.693 に答える
0

これは私にとってはうまくいきます:

use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Useperl = 1;
binmode STDOUT, ":utf8";
{ no warnings 'redefine';
    sub Data::Dumper::qquote {
        my $s = shift;
        return "'$s'";
    }
}
my $s = "rcente\x{3a3}";
my %w = ($s=>12);
print Dumper(\%w), "\n";
于 2014-04-01T09:59:59.950 に答える