[Moscow.pm] utf8

Nikolay Mishin mi на ya.ru
Пн Окт 13 12:51:39 PDT 2014


Дорогие перломаны и перлознаи, как любил говорить мой хороший знакомый,
Приходит мне на вход строка (https://github.com/mishin/presentation/blob/master/show_utf.pl)
вида
\(42f) \(43b)\(44e)\(431)\(43b)\(44e) \(41f)\(435)\(440)\(43b)
- (так utf экспортируется в dsx в IBM Datastage)
ну я ее преобразую к виду 
\x{42f} \x{43b}\x{44e}\x{431}\x{43b}\x{44e} \x{41f}\x{435}\x{440}\x{43b}

my $utf_str_2 =
  "\(42f) \(43b)\(44e)\(431)\(43b)\(44e) \(41f)\(435)\(440)\(43b)";
$utf_str_2 =~ s/\((\w+)\)/\\x{$1}/g;

вот код

#!/usr/bin/env perl
use utf8;
use Modern::Perl;
use Encode::Locale;
use Data::Dumper qw( Dumper );
if (-t) {
binmode( STDIN, ":encoding(console_in)" );
binmode( STDOUT, ":encoding(console_out)" );
binmode( STDERR, ":encoding(console_out)" );
}
my $love = "Я люблю Перл";
print Dumper ($love);
my $utf_str =
"\x{42f} \x{43b}\x{44e}\x{431}\x{43b}\x{44e} \x{41f}\x{435}\x{440}\x{43b}";
$utf_str =~ s/\\x\{(\w+)\}/\($1)/g;
say "$utf_str";
my $utf_str_2 =
"\(42f) \(43b)\(44e)\(431)\(43b)\(44e) \(41f)\(435)\(440)\(43b)";
$utf_str_2 =~ s/\((\w+)\)/\\x{$1}/g;
say 1;
say $utf_str_2;
но интересно, что если 
у тебя есть строка
$a="\x{42f}";
say $a;
то say выведет "Я"
но если
у тебя происходят преобразования
и сама строка становится 
"\x{42f}" после 
$a="\(42f)";
$a =~ s/\((\w+)\)/\\x{$1}/g;
то 
say $a;
выводит "\x{42f}"
вопрос (тем, кто дочитал;))
как сделать так, чтобы напечаталась "Я" ??

спасибо

-- 
С уважением
Николай Мишин



Подробная информация о списке рассылки Moscow-pm