Слайд 1Perl и Unicode
Олег Алистратов
Perl Mova – 2010
Слайд 3Unicode в .ru
100 000 случайных сайтов
Top 350* сайтов
* По данным GoalEurope
/ Rating of Russian Web 2.0 Companies 2008
Слайд 5Трафик: text/plain
Увеличение размера кириллического текста на 79%
Слайд 6Трафик: text/html
Увеличение размера HTML с русским текстом на 14%
Медианный размер 100
тыс. случайно выбранных русскоязычных страниц
Слайд 8Производительность: платформы
Mobile Intel® Celeron® 560 @ 2.13 GHz, RAM 1 Gb
Microsoft®
Windows® XP SP3
ActiveState Perl v5.10.0
Intel® Core™2 Duo E7400 @ 2.80 GHz, RAM 2 Gb
Ubuntu 9.10 Karmic Koala linux 2.6.31-14-server
perl v5.10.0
Intel® Xeon® E5450 @ 3.00 GHz × 2, RAM 32 Gb
FreeBSD® 6.2-RELEASE-p3
perl v5.8.8
Слайд 11Регулярные выражения
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]
Слайд 12Исходный файл в UTF-8
{
use utf8;
my $a =
'Привет!';
print length($a), "\n";
}
> 7
{
no utf8;
my $a = 'Привет!';
print length($a), "\n";
}
> 13
Слайд 13Символы и байты
use utf8; # or use encoding "cp1251";
my $a =
'Привет!';
print length($a), "\n";
use bytes;
print length($a), "\n";
> 7
> 13
use encoding::warnings 'FATAL';
Слайд 14Исключения
chdir, chmod, chown, chroot, exec, link, lstat, mkdir, rename, rmdir, stat,
symlink, truncate, unlink, utime, -X
%ENV
glob (<*>)
open, opendir, sysopen
qx/…/, system
readdir, readlink
Слайд 15Encode
use utf8;
use Encode;
my $x = 'a → b';
$x = Encode::encode(
'windows-1251',
$x,
Encode::FB_HTMLCREF
);
print $x, "\n";
> a → b
Слайд 16Символы
my $copy = "\x00a9";
my $copy = "\x{00a9}";
my
$copy = pack('U', 0x00a9);
print $copy;
> ©
Слайд 17Регулярные выражения
my $copy = '©';
$copy =~ /\x{00a9}/;
$copy !~ /\p{Uppercase}/;
$copy =~ /\p{Other_Symbol}/;
$copy
=~ /\p{InLatin-1_Supplement}/;
$copy !~ /\p{InCyrillic}/;
$copy !~ /\p{BidiClass:R}/;
Слайд 19LWP
use 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)) {
# ...
}
}
Слайд 20Базы данных
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;
Слайд 21Конвертация БД
$ mysqldump db_name > dump.sql
$ iconv -f cp1251 -t utf-8
dump.sql >
newdump.sql
$ sed -i .bak "s/cp1251/utf8/"
newdump.sql
$ mysql < newdump.sql
Слайд 22perl 5.12
Расширена поддержка классов и свойста символов до стандарта
Unicode 5.2.0
use charnames
':full';
print "\N{GREEK SMALL LETTER ALPHA}"
Слайд 23Спасибо!
Олег Алистратов
http://alienator.ya.ru
http://clubs.ya.ru/regexp/