• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Perl & Unicode
 

Perl & Unicode

on

  • 2,860 views

 

Statistics

Views

Total Views
2,860
Views on SlideShare
2,857
Embed Views
3

Actions

Likes
0
Downloads
12
Comments
0

2 Embeds 3

http://www.linkedin.com 2
http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Perl & Unicode Perl & Unicode Presentation Transcript

    • Perl и Unicode
      Олег Алистратов
      Perl Mova– 2010
    • Зачем нужен Unicode?
    • Unicode в .ru
      100 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.0
      Intel® Core™2 Duo E7400 @ 2.80 GHz, RAM 2 GbUbuntu 9.10 Karmic Koala linux 2.6.31-14-serverperl v5.10.0
      Intel® 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), " ";
      }
      > 7
      {
      no utf8;
      my $a = 'Привет!';
      print length($a), " ";
      }
      > 13
    • Символы и байты
      use utf8; # or use encoding "cp1251";
      my $a = 'Привет!';
      print length($a), " ";
      use bytes;
      print length($a), " ";
      > 7
      > 13
      use encoding::warnings 'FATAL';
    • Исключения
      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
    • Encode
      use utf8;
      use Encode;
      my $x = 'a -> b';
      $x = Encode::encode(
      'windows-1251',
      $x,
      Encode::FB_HTMLCREF
      );
      print $x, " ";
      > 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}/;
    • IO
      open(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
    • LWP
      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)) {
      # ...
      }
      }
    • Базы данных
      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.0
      usecharnames':full';
      print"N{GREEK SMALL LETTER ALPHA}"
    • Спасибо!
      Олег Алистратов
      http://alienator.ya.ru http://clubs.ya.ru/regexp/