Что нового
в 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__
Андрей Шитов [email protected]