Perl и UnicodeОлег АлистратовPerl Mova– 2010
Зачем нужен Unicode?
Unicode в .ru100 000 случайных сайтовTop 350*сайтов* По данным GoalEurope / Rating of Russian Web 2.0 Companies 2008
История
Трафик: text/plainУвеличение размера кириллического текста на 79%
Трафик: text/htmlУвеличение размера HTML с русским текстом на 14%Медианный  размер 100 тыс. случайно выбранных русскоязычных страниц
Трафик: gzipped
Производительность: платформыMobile Intel® Celeron® 560 @ 2.13 GHz, RAM 1 GbMicrosoft® Windows® XP SP3ActiveState Perl v5.10.0Intel® Core™2 Duo E7400 @ 2.80 GHz, RAM 2 GbUbuntu 9.10 Karmic Koala linux 2.6.31-14-serverperl v5.10.0Intel® Xeon® E5450 @ 3.00 GHz ×2, RAM 32 GbFreeBSD® 6.2-RELEASE-p3perl v5.8.8
Строковые функции107%112%105 … 172%
Регулярные выражения120…600%115%2100...6500%
Регулярные выраженияuse re 'debug';$a =~ /\d/;DIGIT$a =~ /[0-9]/;ANYOF[0-9]$a =~ /(?:0|1|2|3|4|5|6|7|8|9)/;TRIEC-EXACT[0-9]
Исходный файл в UTF-8{use utf8;my $a = 'Привет!';print length($a), "\n";}> 7{no utf8;my $a = 'Привет!';print length($a), "\n";}> 13
Символы и байтыuse utf8; # or use encoding "cp1251";my $a = 'Привет!';print length($a), "\n";use bytes;print length($a), "\n";> 7> 13use encoding::warnings 'FATAL';
Исключенияchdir, chmod, chown, chroot, exec, link, lstat, mkdir, rename, rmdir, stat, symlink, truncate, unlink, utime, -X%ENVglob (<*>)open, opendir, sysopenqx/…/, systemreaddir, readlink
Encodeuse utf8;use Encode;my $x = 'a -> b';$x = Encode::encode(        'windows-1251',         $x,         Encode::FB_HTMLCREF     );print $x, "\n";> a &#8594; b
Символыmy $copy = "\x00a9";    my $copy = "\x{00a9}";   my $copy = pack('U', 0x00a9);print $copy;> ©
Регулярные выраженияmy $copy = '©';$copy =~ /\x{00a9}/;$copy !~ /\p{Uppercase}/;$copy =~ /\p{Other_Symbol}/;$copy =~ /\p{InLatin-1_Supplement}/;$copy !~ /\p{InCyrillic}/;$copy !~ /\p{BidiClass:R}/;
IOopen(my $fh, "<:utf8", "file.txt");open(my $fh, "<:encoding(UTF-8)", "file.txt");open(my $fh, "<:encoding(cp1251)", "file.txt");binmode(STDOUT, ":utf8");RTFM Encode::Supported
LWPuse LWP::UserAgent;my $ua = LWP::UserAgent->new;my $response = $ua->get("http://example.com");if ($response->is_success) {my $content = $response->decoded_content;if (defined($content)) {        # ...    }}
Базы данныхMySQL$dbh->do('SET NAMES utf8');$dbh->{mysql_enable_utf8} = 1;PostgreSQL$dbh->do("SET client_encoding TO 'UTF8'");$dbh->{pg_enable_utf8} = 1;SQLite$dbh->{sqlite_unicode} = 1;
Конвертация БД$mysqldumpdb_name > dump.sql$iconv -f cp1251 -t utf-8 dump.sql >  newdump.sql$sed -i .bak "s/cp1251/utf8/"  newdump.sql$mysql < newdump.sql
perl 5.12Расширена поддержка классов и свойста символов до стандартаUnicode 5.2.0usecharnames':full';print"\N{GREEK SMALL LETTER ALPHA}"
Спасибо!Олег Алистратовhttp://alienator.ya.ru http://clubs.ya.ru/regexp/

Perl & Unicode