13.10.2014, 23:51, "Nikolay Mishin" <[email protected]>: > Дорогие перломаны и перлознаи, как любил говорить мой хороший знакомый, > Приходит мне на вход строка > (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}" > вопрос (тем, кто дочитал;)) > как сделать так, чтобы напечаталась "Я" ??
# perl -CSA -lnpe 's#\\\((...)\)#chr(hex$1)#gsme' \(42f) \(43b)\(44e)\(431)\(43b)\(44e) \(41f)\(435)\(440)\(43b) Я люблю Перл -- wbw, artur -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
