клевая конструкция -CSA а что это? работает!!
14.10.2014, 00:07, "[email protected]" <[email protected]>: > 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 -- С уважением Николай Мишин -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
