Что нового в Perl 5.14

Preview:

DESCRIPTION

Обзор новых возможностей версии Perl 5.14

Citation preview

Что нового

в Perl 5.14

perldoc perlhist

5.10.02007−Dec−18

5.10 вышелна 20-летие языка

— Молодой человек, опрос!

¿Кто из вас пользуется версией >= 5.10?

Появился

say

¿Кто из вас

применяетsay

?

Шутки шутками, но

Началась новая история

Modern Perl

Modern Perl

ModernPerl

Понятие Modern Perlчасто переоценивают

На самом деле это не

Это была книга издания 2009 года

OK, смотрим дальшеperldoc perlhist

и пропускаем нечетные версии (5.11, 5.13) —

они dev dev dev

5.12.02010−Apr−12

¿Кто из вас пользуется версией >= 5.12?

— Как пройти на YAPC?

5.14.0RC12011−Apr−20

RC — эторелиз-кандидат

Потом

RC2

А потом

RC3

Не, Perl 6-то, конечно,

еще дольше

Perl 5.14 точно будет в этом году

Даже, может,на этой неделе

Что новогов Perl 5.14?

perldoc perldelta

perldelta = = 5.14 – 5.12

NoticeAs described in perlpolicy, the release of Perl 5.14.0 marks the official end of support for Perl 5.10. Users of Perl 5.10 or earlier should consider upgrading to a more recent release of Perl.

ПереводЧуваки, если вы еще на модном 5.10, то вы старперы.

Если серьезно,то обновиться

все-такине всегда просто

Особенно переустановить

все модули

Кто знает, как?

Новое

Синтаксис

1

Безопасность

2

Здесь вспоминается...

register_globals = off

В PHP начиная с 4.2.0

$_GET["sql"]

Перл и так безопасен

PHP —Perl на РусиАнатолий Шарифулин

Несовместимости!

3

Устаревшее

4

Производи-тельность

5

Модули и прагмы

6

Документация

7

Диагностика

8

Утилиты

9

Установка

10

Платформы

11

Внутренности

12

Багфиксы

13

Опечатки

14

Мы посмотримтолько на новый

синтаксиси регулярные

выражения

Велком,

Unicode 6.0!

(Так-то, пора бы и Welcome, Perl 6.0!)

Юникод сразу пролез в регексы

и строки

Это звоночек!

(Глупое маркетинговое слово)

ASCII-символBELL (0x7)

А в Unicode 6.0BELL — 0x1F514

Панико!

Perl спокоени мудр

Perl спокоени мудр

...наверное

В перле

BELL  =  0x0007

В перле

BELL  =  0x0007\N{BELL}  =  0x0007

В перле

BELL  =  0x0007\N{BELL}  =  0x00070x0007  =  ALERT

BELL  =  0x0007\N{BELL}  =  0x00070x0007  =  ALERTALERT  =  "\a"

BELL  =  0x0007\N{BELL}  =  0x00070x0007  =  ALERTALERT  =  "\a"

\N{BEL}  =  0x0007

BELL  =  0x0007\N{BELL}  =  0x00070x0007  =  ALERTALERT  =  "\a"

\N{BEL}  =  0x00070x1F514  —  без имени

BELL  =  0x0007\N{BELL}  =  0x00070x0007  =  ALERTALERT  =  "\a"

\N{BEL}  =  0x00070x1F514  —  без имени

0x1F514  =                \N{U+1F514}

ALERT  =  "\a"\N{BEL}  =  0x00070x1F514  —  без имени

0x1F514  =                \N{U+1F514}

Планы на Perl 5.16

\N{BELL}  =  0x1F514

0x1F514  —  без имени0x1F514  =                \N{U+1F514}

Планы на Perl 5.16

\N{BELL}  =  0x1F514

прежний \N{BELL}  заменить  \N{ALERT},  \N{BEL}  или  "\a"

use  feature  'unicode_strings';

С ней будет счастье

Все и вездеокажется

в юникоде

Чтобы включить новые возможности

use v5.14;

Заодно подключится и

use strict;

vector stringversion string

сокращенно — v-string

5.10.0v5.10.0v5.10

Новшествав регулярных выражениях

(?^  .  .  .)

Локально сбрасывает

все модификаторы

"ABC"  =~  /abc/i;

True

False

"ABC"  =~  /a(?^:b)c/i;

True

"ABC"  =~  /a(?^i:b)c/i;

Хитрое обоснование

$  perl5.14.0  -­‐MData::Dumper  -­‐E'my  $x  =  qr/abc/;  say  Dumper($x)'

$VAR1  =  qr/(?^u:abc)/;

Не изменится, когда появятся новые модификаторы

$  perl5.10.0  -­‐MData::Dumper  -­‐E'my  $x  =  qr/abc/;  say  Dumper($x)'

$VAR1  =  qr/(?-­‐xism:abc)/;

Изменится, когда появятся новые модификаторы

Новые модификаторы

/l==

use  locale;

/u==

use  feature  'unicode_strings';

/d~~

no  locale;no  feature  

'unicode_strings';

/d~~

no  locale;no  feature  

'unicode_strings';

по

умолчанию

/a

Сколькосимволов совпадет c?

/\d/

Сколькосимволов совпадет c?

/\d/

±420

for  (0x0  ..  0x10FFFF)  {        my  $char  =  chr($_);        say  $char                if  $char  =~  /^\d$/;}

С /\d/ совпадет все, что в юникоде

считается цифрой

0, 1, 2, 3, 4, 5, 6, 7, 8, 9,٠ ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩, ੦,

੧, ੨, ੩, ੪, ੫, ੬, ੭, ੮, ੯, ૦, ૧,

૨, ૩, ૪, ૫, ૬, ૭, ૮, ૯, ௦, ௧, ௨,

௩, ௪, ௫, ௬, ௭, ௮, ௯, ...

\d стало причиной разногласий

и споров

Поведение /dстабильное,но спорное

d

/aВстречайте

for  (0x0  ..  0x10FFFF)  {        my  $char  =  chr($_);        say  $char                if  $char  =~  /^\d$/a;}

Совпадут только 10 символов из ASCII

$  perl  a1.pl  |  wc  -­‐l10

/a создаетASCII-версии

модификаторов\d, \s и \w

И влияет на поведение \b и \B

Модификатор /r

Non-destructive substitution

Подстановка,не изменяющая

оригинал

use  v5.14;

my  $version  =  "Perl  5.10";say  $version  =~  s/5\.10/5.14/r;  

Результат: Perl  5.14

my $old = "Погода в Ленинграде";my $new = $old =~ s/Ленинград/Санкт-Петербург/r;

Работас массивами

и хешами

Можно убратьвсе лишнее

Это экспериментальная

фича

use  v5.14;

my  $a  =  [];push  $a,  3,  5,  7;

use  v5.10;

my  $a  =  [];push  @$a,  3,  5,  7;

(Как @a[1] в Perl 6)

А также

push/pop  @$arrayref

push/pop  $arrayref

shift/unshift  @$arrayref

shift/unshift  $arrayref

splice  @$arrayref

splice  $arrayref

keys/values  %$hashref

keys/values  $hashref

keys/values  @$arrayref

keys/values  $arrayref

each  %$href  /  @$aref

each  $href  /  $aref

given возвращает последнее

вычисленное значение

say  mysub(7);

sub  mysub  {        given($_[0])  {              "мало"    when  3;              "ОК"        when  5;              "много"  when  7;              "?";        }}

(Для любителейне писать return)

Чей вклад?

Aaron Crane, Abhijit Menon-Sen, Abigail, Ævar Arnfjörð Bjarmason, Alastair Douglas, Alexander Alekseev, Alexander Hartmaier, Alexandr Ciornii, Alex Davies, Alex Vandiver, Ali Polatel, Allen Smith, Andreas König, Andrew Rodland, Andy Armstrong, Andy Dougherty, Aristotle Pagaltzis, Arkturuz, Arvan, A. Sinan Unur, Ben Morrow, Bo Lindbergh, Boris Ratner, Brad Gilbert, Bram, brian d foy, Brian Phillips, Casey West, Charles Bailey, Chas. Owens, Chip Salzenberg, Chris 'BinGOs' Williams, chromatic, Craig A. Berry, Curtis Jewell, Dagfinn Ilmari Mannsåker, Dan Dascalescu, Dave Rolsky, David Caldwell, David Cantrell, David Golden, David Leadbeater, David Mitchell, David Wheeler, Eric Brine, Father Chrysostomos, Fingle Nark, Florian Ragwitz, Frank Wiegand, Franz Fasching, Gene Sullivan, George Greer, Gerard Goossen, Gisle Aas, Goro Fuji, Grant McLean, gregor herrmann, H.Merijn Brand, Hongwen Qiu, Hugo van der Sanden, Ian Goodacre, James E Keenan, James Mastros, Jan Dubois, Jay Hannah, Jerry D. Hedden, Jesse Vincent, Jim Cromie, Jirka Hruška, John Peacock, Joshua ben Jore, Joshua Pritikin, Karl Williamson, Kevin Ryde, kmx, Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯, Larwan

Berke, Leon Brocard, Leon Timmermans, Lubomir Rintel, Lukas Mai, Maik Hentsche, Marty Pauley, Marvin Humphrey, Matt Johnson, Matt S Trout, Max Maischein, Michael Breen, Michael Fig, Michael G Schwern, Michael Parker, Michael Stevens, Michael Witten, Mike Kelly, Moritz Lenz, Nicholas Clark, Nick Cleaton, Nick Johnston, Nicolas Kaiser, Niko Tyni, Noirin Shirley, Nuno Carvalho, Paul Evans, Paul Green, Paul Johnson, Paul Marquess, Peter J. Holzer, Peter John Acklam, Peter Martini, Philippe Bruhat (BooK), Piotr Fusik, Rafael Garcia-Suarez, Rainer Tammer, Reini Urban, Renee Baecker, Ricardo Signes, Richard Möhn, Richard Soderberg, Rob Hoelz, Robin Barker, Ruslan Zakirov, Salvador Fandiño, Salvador Ortiz Garcia, Shlomi Fish, Sinan Unur, Sisyphus, Slaven Rezic, Steffen Müller, Steve Hay, Steven Schubiger, Steve Peters, Sullivan Beck, Tatsuhiko Miyagawa, Tim Bunce, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tony Cook, Tye McQueen, Vadim Konovalov, Vernon Lyon, Vincent Pit, Walt Mankowski, Wolfram Humann, Yves Orton, Zefram и Zsbán Ambrus.

use v5.14 or die;

Или хотя бы

use v5.14 or v5.12 ;-)

__END__

Андрей Шитов andy@shitov.ru

Recommended