[Moscow.pm] кодировка в Perl почему все это так странно работает?

Nikolay Mishin mi на ya.ru
Вс Сен 21 14:28:15 PDT 2014


Привет, MoscowPM,
тут родился вопрос под win7 (юникс могут быть теже странности, не проверял)

#!/usr/bin/env perl
use utf8;
use Modern::Perl;
use Encode::Locale;
use Encode qw( decode encode from_to);
use Text::Iconv;
use Encode::Detect::Detector;
use Data::Dumper qw( Dumper ); 

 
if (-t) 
{
    binmode(STDIN, ":encoding(console_in)");
	binmode(STDOUT, ":encoding(console_out)");
	binmode(STDERR, ":encoding(console_out)");
}

my $lang = shift or die "Usage: $0 What_is_your_language?\n"; 
my_dump('lang_01',$lang);
my $converter = Text::Iconv->new( "cp1251", "utf-8");
$lang = $converter->convert($lang);
my_dump('lang_02',$lang);
$lang = Encode::decode("utf8",$lang);
my_dump('lang_03',$lang);
my_dump('lang_04_перл',qq{перл});

 $lang =~ /(perl|перл) (?{print "use Perl or die!!\nИспользуй Перл или умри!!";}) /ix;#русский не мачится, почему?
 
 sub my_dump
 { 
 my ($name,$var)=@_;
 local $Data::Dumper::Useqq = 1;
 local $Data::Dumper::Indent = 0; 
 local $Data::Dumper::Terse = 1; 
 print(Encode::Detect::Detector::detect(qq{$lang})." ".qq{\$$name }." dump=".Dumper($var)."\n");
 }

этот же код на гитхабе
https://github.com/mishin/presentation/blob/master/100_regex_4_moscow_pm.pl

моя задача была, чтобы скрипт
perl 100_regex_4_moscow_pm.pl перл
читая из консоли слово "перл" находил его в регексе внутри скрипта

вопросы:
1) почему, если в консоле
perl -MEncode::Detect::Detector -E "say Encode::Detect::Detector::detect(qq{перл})"
у меня кодировка ISO-8859-7
my $converter = Text::Iconv->new( "cp1251", "utf-8");
Text::Iconv ее проглатывает как  cp1251 (причем ISO там не проходит) ?

2)что происходит со строкой здесь
UTF-8 $lang_02  dump="\320\277\320\265\321\200\320\273"
$lang = Encode::decode("utf8",$lang);
UTF-8 $lang_03  dump="\x{43f}\x{435}\x{440}\x{43b}"
--что такое делает decode?
я так понимаю - он починивает utf8, но что конкретно

спасибо, хорошей недели!!


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



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