Если вы работаете со сложными структурами данных (массивы хешей, хеши массивов и т.п.), наверняка вы используете для отладки модуль Data::Dumper. Все бы хорошо, но этот модуль категорически не хочет работать с символами в кодировке UTF-8, его вывод выглядит примерно так:
'country' => "\x{420}\x{43e}\x{441}\x{441}\x{438}\x{44f}",
'city' => "\x{41c}\x{43e}\x{441}\x{43a}\x{432}\x{430}",
'airport' => "\x{414}\x{43e}\x{43c}\x{43e}\x{434}\x{435}\x{434}\x{43e}\x{432}\x{43e}",
'code' => 'DME'
Чтобы сделать вывод функции Dumper читаемым, надо просто добавить в программу вот такой кусочек кода:
$Data::Dumper::Useqq = 1;
{ no warnings 'redefine';
sub Data::Dumper::qquote {
my $s = shift;
return "'$s'";
}
}
Тогда вывод будет выглядеть совсем по другому:
'country' => 'Россия',
'city' => 'Москва',
'terminal' => '',
'airport' => 'Домодедово',
'code' => 'DME'
perl 5.8.9
у меня это не работает
хотя тоже этот способ увидел на perlmonks, но что-то никак (((
Я проверял на Perl 5.10.0
Кстати, все работает, я косякнул – написал Dumper::Data::qqoute вместо Dumper::Data::qquote
Щас исправил, все заработало
Хорошие советы – как классика, никогда не стареют.
21 век, *ля
Перестало работать
Проблема в том, что используется XS версия.
Чтобы ее отключить надо добавить
$Data::Dumper::Useperl = 1;
До сих пор актуально, спасибо!
Можно еще так:
use utf8;
use strict;
use warnings;
use Data::Dumper;
my $data = {
‘country’ => ‘Россия’,
‘city’ => ‘Москва’,
‘terminal’ => ”,
‘airport’ => ‘Домодедово’,
‘code’ => ‘DME’
};
my $dump = Dumper($data);
$dump =~ s/\\x\{([a-f0-9]{2,})\}/chr(hex($1))/ge;
print $dump;