Your SlideShare is downloading. ×
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Что нового в Perl? 5.10 — 5.16

9,333

Published on

Перевод презентации @rjbs "What's new in Perl? v5.10 — v5.16" http://www.slideshare.net/rjbs/whats-new-in-perl-v510-v516

Перевод презентации @rjbs "What's new in Perl? v5.10 — v5.16" http://www.slideshare.net/rjbs/whats-new-in-perl-v510-v516

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,333
On Slideshare
0
From Embeds
0
Number of Embeds
22
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Что нового в Perl? 5.10 — 5.16 Рикардо Синес (Ricardo Signes, rjbs)
  • 2. Perl 5 Что нового?
  • 3. Perl 5.10Для тех, кто не совсем безумен
  • 4. Perl 5.12Для использования каждый день
  • 5. Perl 5.14 Для прагматиков
  • 6. Perl 5.16Для настоящих программистов
  • 7. Лексическая семантика!
  • 8. use feature ‘say’;say “Это тест!”;{ no feature ‘say’; say “Это ошибка!”;}
  • 9. use 5.16.0;say “Это тест!”;{ no feature ‘say’; say “Это ошибка!”;}
  • 10. #!/usr/bin/perluse strict;use warnings;use 5.16.0; # use feature ‘:5.16’;my $x = Reticulator->new;$x->reticulate( @splines );
  • 11. #!/usr/bin/perluse strict;use warnings; # no feature;my $x = Reticulator->new;$x->reticulate( @splines );
  • 12. #!/usr/bin/perluse strict;use warnings; # use feature ‘:default’;my $x = Reticulator->new;$x->reticulate( @splines );
  • 13. array_base: $[
  • 14. Классные новые фичи!
  • 15. Лучше сообщения об ошибках$str = “Привет, $name. Последнийвизит был $last. Сейчас $time.”; perldiag
  • 16. Лучше сообщения об ошибках $str = “Привет, $name. Последний визит был $last. Сейчас $time.”;Use of uninitialized value inconcatenation (.) or string at hello.plx line 9. perldiag
  • 17. Лучше сообщения об ошибках $str = “Привет, $name. Последний визит был $last. Сейчас $time.”;Use of uninitialized value $time inconcatenation (.) or string at hello.plx line 9. perldiag
  • 18. state-переменныеmy $LINES_READ = 0;sub read_line { $LINES_READ++; ...} perlsub
  • 19. state-переменные{ my $LINES_READ = 0; sub read_line { $LINES_READ++; ... }} perlsub
  • 20. state-переменныеsub read_line { state $LINES_READ = 0; $LINES_READ++; ...} perlsub
  • 21. Истина и определённость perlop
  • 22. Истина и определённость sub record_sale { perlop
  • 23. Истина и определённость sub record_sale { my ($product, $amount) = @_; perlop
  • 24. Истина и определённость sub record_sale { my ($product, $amount) = @_; my $price = $amount perlop
  • 25. Истина и определённость sub record_sale { my ($product, $amount) = @_; my $price = $amount || $product->price; perlop
  • 26. Истина и определённость sub record_sale { my ($product, $amount) = @_; my $price = $amount || $product->price; ... } perlop
  • 27. Истина и определённость sub record_sale { my ($product, $amount) = @_; my $price = $amount || $product->price; ... } perlop
  • 28. Истина и определённость sub record_sale { my ($product, $amount) = @_; my $price = defined $amount ? $amount : $product->price; ... } perlop
  • 29. Истина и определённость sub record_sale { my ($product, $amount) = @_; my $price = $amount || $product->price; ... } perlop
  • 30. Истина и определённость sub record_sale { my ($product, $amount) = @_; my $price = $amount // $product->price; ... } perlop
  • 31. Новый оператор ИЛИsub record_sale { my ($product, $amount) = @_; $amount //= $product->price; ...} perlop
  • 32. say $what• новая встроенная функция say• делает тоже самое, что и print• только добавляет n в конце строки perlfunc
  • 33. say $what perlfunc
  • 34. say $whatprint “Привет, мир!n”; perlfunc
  • 35. say $whatprint “Привет, мир!n”;print “$messagen”; perlfunc
  • 36. say $whatprint “Привет, мир!n”;print “$messagen”;print “$_n” for @lines; perlfunc
  • 37. say $whatprint “Привет, мир!n”;say “Привет, мир!”;print “$messagen”;print “$_n” for @lines; perlfunc
  • 38. say $whatprint “Привет, мир!n”;say “Привет, мир!”;print “$messagen”;say $message;print “$_n” for @lines; perlfunc
  • 39. say $whatprint “Привет, мир!n”;say “Привет, мир!”;print “$messagen”;say $message;print “$_n” for @lines;say for @lines; perlfunc
  • 40. $ perl -e ‘print “Foon”’
  • 41. $ perl -e ‘print “Foon”’$ perl -E ‘say “Foo”’
  • 42. Рекурсия!sub fact { my ($x) = @_; # must be +int return $x if $x == 1; return $x * fact($x - 1);}
  • 43. Рекурсия!sub fact { my ($x) = @_; # must be +int return $x if $x == 1; return $x * fact($x - 1);}
  • 44. Рекурсия!my $fact = sub { my ($x) = @_; # must be +int return $x if $x == 1; return $x * $fact->($x - 1);};
  • 45. Рекурсия!my $fact = sub { my ($x) = @_; # must be +int return $x if $x == 1; return $x * $fact->($x - 1);};
  • 46. Рекурсия!my $fact; $fact = sub { my ($x) = @_; # must be +int return $x if $x == 1; return $x * $fact->($x - 1);};
  • 47. Рекурсия!my $fact; $fact = sub { my ($x) = @_; # must be +int return $x if $x == 1; return $x * $fact->($x - 1);};
  • 48. Рекурсия!use Scalar::Util qw(weaken);my $fact = do { my $f1; my $f2 = $f1 = sub { my ($x) = @_; return $x if $x == 1; return $x * $f1->($x - 1); }; weaken($f1); $f1;};
  • 49. Рекурсия!use 5.16.0; # current submy $fact = sub { my ($x) = @_; # must be +int return $x if $x == 1; return $x * __SUB__->($x - 1);};
  • 50. Дескрипторы файлов!
  • 51. autodieopen my $fh, ‘<‘, $filename;while (<$fh>) { ...}close $fh; autodie
  • 52. autodieopen my $fh, ‘<‘, $filename or die “couldn’t open $filename: $!”;while (<$fh>) { ...}close $fh or die “couldn’t close $filename: $!”; autodie
  • 53. autodieuse autodie;open my $fh, ‘<‘, $filename;while (<$fh>) { ...}close $fh; autodie
  • 54. autodieuse autodie;open my $fh, ‘<‘, $filename;while (<$fh>) { no autodie; rmdir or warn “couldn’t remove $_: $!”;}close $fh; autodie
  • 55. autodieuse autodie;sub foo { my $filename = shift; open my $fh, ‘<‘, $filename; while (<$fh>) { ... }} # неявный вызов close БЕЗ autodie autodie
  • 56. IO::Filesub stream_to_fh { my ($self, $fh) = @_; fileno $fh or die “can’t stream to closed fh”; while (my $hunk = $self->next_hunk) { print {$fh} $hunk; } close $fh or die “error closing: $!”;} perlopentut
  • 57. IO::Filesub stream_to_fh { my ($self, $fh) = @_; $fh->fileno or die “can’t stream to closed fh”; while (my $hunk = $self->next_hunk) { $fh->print($hunk); } $fh->close or die “error closing: $!”;} perlopentut
  • 58. IO::Filesub stream_to_fh { ... $fh->print($hunk); ... $fh->close or die “error closing: $!”;}open my $target, ‘>’, ‘/dev/null’ or die “can’t open bit bucket:$!”;stream_to_fh($target); perlopentut
  • 59. IO::Fileuse IO::File;sub stream_to_fh { ... $fh->print($hunk); ... $fh->close or die “error closing: $!”;}open my $target, ‘>’, ‘/dev/null’ or die “can’t open bit bucket:$!”;stream_to_fh($target); perlopentut
  • 60. IO::Fileuse 5.14.0;sub stream_to_fh { ... $fh->print($hunk); ... $fh->close or die “error closing: $!”;}open my $target, ‘>’, ‘/dev/null’ or die “can’t open bit bucket:$!”;stream_to_fh($target); perlopentut
  • 61. IO::Fileuse 5.14.0; use autodie;sub stream_to_fh { ... $fh->print($hunk); ... $fh->close or die “error closing: $!”;}open my $target, ‘>’, ‘/dev/null’ or die “can’t open bit bucket:$!”;stream_to_fh($target); perlopentut
  • 62. package-блокиpackage Library::Awesome;our $VERSION = 1.234;sub foo { ... }1; perlfunc
  • 63. package-блокиuse 5.12.0;package Library::Awesome1.234;sub foo { ... }1; perlfunc
  • 64. package-блокиuse 5.12.0;package Library::Awesome1.234-alpha;sub foo { ... }1; perlfunc
  • 65. package-блокиuse 5.12.0;package Library::Awesome1.234 { sub foo { ... }} perlfunc
  • 66. Перегрузка операций• перегрузка -X• перегрузка qr• "no overloading"• предупреждения неизвестных перегрузок операций perldoc
  • 67. Другие новые фичи!
  • 68. «Умное» сравнение smrt match
  • 69. «Умное» сравнениеif ($x ~~ $y) { ...}
  • 70. «Умное» сравнение perldoc
  • 71. «Умное» сравнение• если $x и $y неизвестны, то существует 23 возможные вариации• и некоторые из них — рекурсивные• нет, вы не будет помнить их все• ... и они не интуитивные perldoc
  • 72. «Умное» сравнение• если $x и $y неизвестны, то существует 23 возможные вариации• и некоторые из них — рекурсивные• нет, вы не будет помнить их все• ... и они не интуитивные perldoc
  • 73. «Умное» сравнение• если $x и $y неизвестны, то существует 23 возможные вариации• и некоторые из них — рекурсивные• нет, вы не будет помнить их все• ... и они не интуитивные perldoc
  • 74. «Умное» сравнение• если $x и $y неизвестны, то существует 23 возможные вариации• и некоторые из них — рекурсивные• нет, вы не будет помнить их все• ... и они не интуитивные perldoc
  • 75. Сравнение
  • 76. Сравнениеif ($x ~~ $y) { ... }if ($str ~~ %hash) { ... }if ($str ~~ @arr) { ... }if ($str ~~ [ %h, ... ]) { ... }if (%hash ~~ %h) { ... }if (%hash ~~ @arr) { ... }if (%hash ~~ [ %h, ... ]) { ... }
  • 77. Сравнениеif ($x ~~ $y) { ... }if ($str ~~ %hash) { ... }if ($str ~~ @arr) { ... }if ($str ~~ [ %h, ... ]) { ... }if (%hash ~~ %h) { ... }if (%hash ~~ @arr) { ... }if (%hash ~~ [ %h, ... ]) { ... }
  • 78. Сравнениеif ($x ~~ $y) { ... }if ($str ~~ %hash) { ... }if ($str ~~ @arr) { ... }if ($str ~~ [ %h, ... ]) { ... }if (%hash ~~ %h) { ... }if (%hash ~~ @arr) { ... }if (%hash ~~ [ %h, ... ]) { ... }
  • 79. Сравнениеif ($x ~~ $y) { ... }if ($str ~~ %hash) { ... }if ($str ~~ @arr) { ... }if ($str ~~ [ %h, ... ]) { ... }if (%hash ~~ %h) { ... }if (%hash ~~ @arr) { ... }if (%hash ~~ [ %h, ... ]) { ... }
  • 80. Сравнениеif ($x ~~ $y) { ... }if ($str ~~ %hash) { ... }if ($str ~~ @arr) { ... }if ($str ~~ [ %h, ... ]) { ... }if (%hash ~~ %h) { ... }if (%hash ~~ @arr) { ... }if (%hash ~~ [ %h, ... ]) { ... }
  • 81. Сравнениеif ($x ~~ $y) { ... }if ($str ~~ %hash) { ... }if ($str ~~ @arr) { ... }if ($str ~~ [ %h, ... ]) { ... }if (%hash ~~ %h) { ... }if (%hash ~~ @arr) { ... }if (%hash ~~ [ %h, ... ]) { ... }
  • 82. Сравнениеif ($x ~~ $y) { ... }if ($str ~~ %hash) { ... }if ($str ~~ @arr) { ... }if ($str ~~ [ %h, ... ]) { ... }if (%hash ~~ %h) { ... }if (%hash ~~ @arr) { ... }if (%hash ~~ [ %h, ... ]) { ... }
  • 83. given ($x) { when ($y) { ... } when ($z) { ... }}
  • 84. given ($x) { when ($y) { try { ... } catch { warn “error: $_”; return undef; } }}
  • 85. each @array
  • 86. each @arraywhile (my ($i, $v) = each @array) { say “$i: $v”;}
  • 87. push $aref, @etc;
  • 88. Сейчас с меньшимколичеством багов!
  • 89. Проблема 2038 года y2038
  • 90. ~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038~$ perl5.10.0 -E ‘say scalar localtime 2**31’Fri Dec 13 15:45:52 1901
  • 91. ~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038~$ perl5.10.0 -E ‘say scalar localtime 2**31’Fri Dec 13 15:45:52 1901
  • 92. ~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038~$ perl5.10.0 -E ‘say scalar localtime 2**31’Fri Dec 13 15:45:52 1901
  • 93. ~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038~$ perl5.10.0 -E ‘say scalar localtime 2**31’Fri Dec 13 15:45:52 1901
  • 94. ~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038~$ perl5.12.0 -E ‘say scalar localtime 2**31’Mon Jan 18 22:14:08 2038
  • 95. ~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038~$ perl5.12.0 -E ‘say scalar localtime 2**31’Mon Jan 18 22:14:08 2038
  • 96. ~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038~$ perl5.12.0 -E ‘say scalar localtime 2**31’Mon Jan 18 22:14:08 2038
  • 97. ~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038~$ perl5.12.0 -E ‘say scalar localtime 2**31’Mon Jan 18 22:14:08 2038
  • 98. $@ perlvar
  • 99. $@ Try::Tiny
  • 100. $@• Ну, на самом деле, вы используете Try::Tiny, верно?• И это тоже делает Try::Tiny более надёжным!• Вы видите, что eval и $@ — полностью ужасны Try::Tiny
  • 101. $@• Ну, на самом деле, вы используете Try::Tiny, верно?• И это тоже делает Try::Tiny более надёжным!• Вы видите, что eval и $@ — полностью ужасны Try::Tiny
  • 102. $@• Ну, на самом деле, вы используете Try::Tiny, верно?• И это тоже делает Try::Tiny более надёжным!• Вы видите, что eval и $@ — полностью ужасны Try::Tiny
  • 103. use 5.12.0;{ package X; sub DESTROY { eval { } }}eval { my $x = bless {} => ‘X’; die “DEATH!!”;};warn “ERROR: $@”;$ perl5.12.4 test.plERROR: perlfunc
  • 104. use 5.12.0;{ package X; sub DESTROY { eval { } }}eval { my $x = bless {} => ‘X’; die “DEATH!!”;};warn “ERROR: $@”;$ perl5.12.4 test.plERROR: perlfunc
  • 105. use 5.14.0;{ package X; sub DESTROY { eval { } }}eval { my $x = bless {} => ‘X’; die “DEATH!!”;};warn “ERROR: $@”;$ perl5.12.4 test.plERROR: perlfunc
  • 106. use 5.14.0;{ package X; sub DESTROY { eval { } }}eval { my $x = bless {} => ‘X’; die “DEATH!!”;};warn “ERROR: $@”;$ perl5.14.1 test.plERROR: DEATH!! perlfunc
  • 107. perl -le ‘print $^X’10.0: perl10.1: perl12.0: perl14.0: perl16.0: /Users/rjbs/perl5/perlbrew/perls/16.0/bin/perl
  • 108. perl -le ‘print $^X’10.0: perl10.1: perl12.0: perl14.0: perl16.0: /Users/rjbs/perl5/perlbrew/perls/16.0/bin/perl
  • 109. perl -le ‘print $^X’10.0: perl10.1: perl12.0: perl14.0: perl16.0: /Users/rjbs/perl5/perlbrew/perls/16.0/bin/perl
  • 110. perl -le ‘print $^X’10.0: perl10.1: perl12.0: perl14.0: perl16.0: /Users/rjbs/perl5/perlbrew/perls/16.0/bin/perl
  • 111. perl -le ‘print $^X’10.0: perl10.1: perl12.0: perl14.0: perl16.0: /Users/rjbs/perl5/perlbrew/perls/16.0/bin/perl
  • 112. perl -le ‘print $^X’10.0: perl10.1: perl12.0: perl14.0: perl16.0: /Users/rjbs/perl5/perlbrew/perls/16.0/bin/perl
  • 113. Простые строки
  • 114. Perl — хорош для Unicode perlunicode
  • 115. Perl 5.16 лучше perlunicode
  • 116. Perl 5.16 лучше• поддержка Unicode 6.1• доступно каждое свойство символа• X в регулярных выражениях — более осмысленно perlunicode
  • 117. Perl 5.16 лучше• поддержка Unicode 6.1• доступно каждое свойство символа• X в регулярных выражениях — более осмысленно perlunicode
  • 118. Perl 5.16 лучше• поддержка Unicode 6.1• доступно каждое свойство символа• X в регулярных выражениях — более осмысленно perlunicode
  • 119. «Unicode-баг» perlunicode
  • 120. «Unicode-баг»• строка не всегда рассматриваются как Unicode• это вызывает странные ошибки, для поиска которых требуется время• use feature ‘unicode_strings’;• perlunicode
  • 121. «Unicode-баг»• строка не всегда рассматриваются как Unicode• это вызывает странные ошибки, для поиска которых требуется время• use feature ‘unicode_strings’;• perlunicode
  • 122. «Unicode-баг»• строка не всегда рассматриваются как Unicode• это вызывает странные ошибки, для поиска которых требуется время• use feature ‘unicode_strings’;• или use 5.12.0 perlunicode
  • 123. «Unicode-баг»• строка не всегда рассматриваются как Unicode• это вызывает странные ошибки, для поиска которых требуется время• use feature ‘unicode_strings’;• или use 5.12.0 perlunicode
  • 124. Unicode eval• eval $str• это октеты или символы?• что будет, если это включает в себя «use utf8»• или вы работаете под «use utf8» perldoc
  • 125. Unicode eval• evalbytes $str• unicode_eval perldoc
  • 126. Мой любимый 5.12-изм?if (length $input->{new_email}) { $user->update_email(...);}Use of uninitialized value in lengthat - line 3120. perldiag
  • 127. Мой любимый 5.12-изм?if (length $input->{new_email}) { $user->update_email(...);}Use of uninitialized value in lengthat - line 3120. perldiag
  • 128. Мой любимый 5.12-изм?if (length $input->{new_email}) { $user->update_email(...);}Use of uninitialized value in lengthat - line 3120. perldiag
  • 129. say “I o{23145} Perl 5.14!”;I ♥ Perl 5.14! perlre
  • 130. say “I o{23145} Perl 5.14!”;I ♥ Perl 5.14! perlre
  • 131. say “I 23145 Perl 5.14!”;I ?45 Perl 5.14! perlre
  • 132. say “I 023145 Perl 5.14!”;I 145 Perl 5.14! perlre
  • 133. say “I 23145 Perl 5.14!”;I ?45 Perl 5.14! perlre
  • 134. qr{ (1) (2) (3) (4) 7 10 (5) (6) (7) (8) (9) 7 10 (10) 7 10}x; perlre
  • 135. qr{ (1) (2) (3) (4) o{7} o{10} (5) (6) (7) (8) (9) o{7} o{10} (10) g{7} g {10}}x; perlre
  • 136. Unicode 6.1
  • 137. Unicode 6.1• 1F309 — мост в ночи charnames
  • 138. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец charnames
  • 139. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец• 1F486 — массаж головы charnames
  • 140. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец• 1F486 — массаж головы• 1F473 — мужик в тюрбане charnames
  • 141. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец• 1F486 — массаж головы• 1F473 — мужик в тюрбане• 1F423 — вылупившийся цыплёнок charnames
  • 142. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец• 1F486 — массаж головы• 1F473 — мужик в тюрбане• 1F423 — вылупившийся цыплёнок• 1F424 — цыплёнок charnames
  • 143. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец• 1F486 — массаж головы• 1F473 — мужик в тюрбане• 1F423 — вылупившийся цыплёнок• 1F424 — цыплёнок• 1F425 — цыплёнок анфас charnames
  • 144. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец• 1F486 — массаж головы• 1F473 — мужик в тюрбане• 1F423 — вылупившийся цыплёнок• 1F424 — цыплёнок• 1F425 — цыплёнок анфас• 1F421 — иглобрюхие charnames
  • 145. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец• 1F486 — массаж головы• 1F473 — мужик в тюрбане• 1F423 — вылупившийся цыплёнок• 1F424 — цыплёнок• 1F425 — цыплёнок анфас• 1F421 — иглобрюхие• 1F60B — облизывающийся смайл charnames
  • 146. Unicode 6.1• 1F309 — мост в ночи• 026CE — змееносец• 1F486 — массаж головы• 1F473 — мужик в тюрбане• 1F423 — вылупившийся цыплёнок• 1F424 — цыплёнок• 1F425 — цыплёнок анфас• 1F421 — иглобрюхие• 1F60B — облизывающийся смайл• 1F4A9 — куча говна charnames
  • 147. N{...}use 5.16.0;say "I N{HEAVY_BLACK_HEART} Queensr" . "N{LATIN_SMALL_LETTER_Y_WITH_DIAERESIS}" . "che!"; perldiag
  • 148. Преобразования регистра case folding
  • 149. Case Folding
  • 150. Case Foldingif ( lc $foo eq lc $bar ) { ...}
  • 151. Case Foldingif ( fc $foo eq fc $bar ) { ...}
  • 152. Case Folding
  • 153. Case Folding lc ‘ς‘ ➔ ‘ς‘ uc ‘ς‘ ➔ ‘Σ‘ fc ‘ς‘ ➔ ‘σ‘ lc ‘ß’ ➔ ‘ß’ uc ‘ß’ ➔ ‘SS’ fc ‘ß’ ➔ ‘ss’
  • 154. Case Folding lc ‘ς‘ ➔ ‘ς‘ uc ‘ς‘ ➔ ‘Σ‘ fc ‘ς‘ ➔ ‘σ‘ lc ‘ß’ ➔ ‘ß’ uc ‘ß’ ➔ ‘SS’ fc ‘ß’ ➔ ‘ss’
  • 155. Case Folding lc ‘ς‘ ➔ ‘ς‘ uc ‘ς‘ ➔ ‘Σ‘ fc ‘ς‘ ➔ ‘σ‘ lc ‘ß’ ➔ ‘ß’ uc ‘ß’ ➔ ‘SS’ fc ‘ß’ ➔ ‘ss’
  • 156. Case Folding lc ‘ς‘ ➔ ‘ς‘ uc ‘ς‘ ➔ ‘Σ‘ fc ‘ς‘ ➔ ‘σ‘ lc ‘ß’ ➔ ‘ß’ uc ‘ß’ ➔ ‘SS’ fc ‘ß’ ➔ ‘ss’
  • 157. Case Folding lc ‘ς‘ ➔ ‘ς‘ uc ‘ς‘ ➔ ‘Σ‘ fc ‘ς‘ ➔ ‘σ‘ lc ‘ß’ ➔ ‘ß’ uc ‘ß’ ➔ ‘SS’ fc ‘ß’ ➔ ‘ss’
  • 158. Case Folding lc ‘ς‘ ➔ ‘ς‘ uc ‘ς‘ ➔ ‘Σ‘ fc ‘ς‘ ➔ ‘σ‘ lc ‘ß’ ➔ ‘ß’ uc ‘ß’ ➔ ‘SS’ fc ‘ß’ ➔ ‘ss’
  • 159. Case Folding
  • 160. Case Folding“file under: L$name”“file under: F$name”
  • 161. Case Folding“file under: L$name”“file under: F$name”
  • 162. В регулярныхвыражениях стали лучше
  • 163. именнованные сохранения named captures
  • 164. Named captures• поиск совпадений по имени, а не позиции• избавиться от страшных $1• больше не второй Python или .Net! perlre
  • 165. Named captures• поиск совпадений по имени, а не позиции• избавиться от страшных $1• больше не второй Python или .Net! perlre
  • 166. Named captures• поиск совпадений по имени, а не позиции• избавиться от страшных $1• больше не второй Python или .Net! perlre
  • 167. Named captures# псевдокодsection:property = value perlre
  • 168. Named captures$line =~ /(w+):(w+) = (w+)/;$section = $1;$name = $2;$value = $3; perlre
  • 169. Named captures $line =~ / (?<section> w+): (?<name> w+) s* = s* (?<value> w+) /x; $section = $+{section}; $name = $+{name}; $value = $+{value}; perlre
  • 170. Новые модификаторы my $hostname = get_hostname; $hostname =~ s/..*//; perlre
  • 171. Новые модификаторыmy $hostname = get_hostname =~ s/..*//; perlre
  • 172. Новые модификаторы(my $hostname = get_hostname) =~ s/..*//; perlre
  • 173. Новые модификаторыmy $hostname = get_hostname =~ s/..*//r; perlre
  • 174. Новые модификаторыmy @short_names = map { s/..*//; } @long_names; perlre
  • 175. Новые модификаторыmy @short_names = map { s/..*//; $_ } @long_names; perlre
  • 176. Новые модификаторыmy @short_names = map { my $x = $_; $x =~ s/..*//; $x } @long_names; perlre
  • 177. Новые модификаторыmy @short_names = map { s/..*//r } @long_names; perlre
  • 178. Новые модификаторыmy @short_names = map s/..*//r, @long_names; perlre
  • 179. Новые модификаторы perldoc
  • 180. Новые модификаторы /u /a /aa /d /l"൮" =~ /d/ ✓ ☐ ☐ ¿? ¿?"ð" =~ /w/ ✓ ☐ ☐ ¿? ¿?"ff" =~ /ff/i ✓ ✓ ☐ ¿? ¿?"ff" =~ /pL/i ✓ ✓ ✓ ¿? ¿? perldoc
  • 181. Новые модификаторы /u /a /aa /d /l"൮" =~ /d/ ✓ ☐ ☐ ¿? ¿?"ð" =~ /w/ ✓ ☐ ☐ ¿? ¿?"ff" =~ /ff/i ✓ ✓ ☐ ¿? ¿?"ff" =~ /pL/i ✓ ✓ ✓ ¿? ¿? perldoc
  • 182. Новые модификаторы /u /a /aa /d /l"൮" =~ /d/ ✓ ☐ ☐ ¿? ¿?"ð" =~ /w/ ✓ ☐ ☐ ¿? ¿?"ff" =~ /ff/i ✓ ✓ ☐ ¿? ¿?"ff" =~ /pL/i ✓ ✓ ✓ ¿? ¿? perldoc
  • 183. Новые модификаторы /u /a /aa /d /l"൮" =~ /d/ ✓ ☐ ☐ ¿? ¿?"ð" =~ /w/ ✓ ☐ ☐ ¿? ¿?"ff" =~ /ff/i ✓ ✓ ☐ ¿? ¿?"ff" =~ /pL/i ✓ ✓ ✓ ¿? ¿? perldoc
  • 184. Новые модификаторы /u /a /aa /d /l"൮" =~ /d/ ✓ ☐ ☐ ¿? ¿?"ð" =~ /w/ ✓ ☐ ☐ ¿? ¿?"ff" =~ /ff/i ✓ ✓ ☐ ¿? ¿?"ff" =~ /pL/i ✓ ✓ ✓ ¿? ¿? perldoc
  • 185. Новые модификаторы /u /a /aa /d /l"൮" =~ /d/ ✓ ☐ ☐ ¿? ¿?"ð" =~ /w/ ✓ ☐ ☐ ¿? ¿?"ff" =~ /ff/i ✓ ✓ ☐ ¿? ¿?"ff" =~ /pL/i ✓ ✓ ✓ ¿? ¿? perldoc
  • 186. Новые модификаторы# Только ASCII-символы:die “Забавные неамериканские символы” if $str =~ /P{ASCII}/;$str =~ /...регулярное выражение.../; perlre
  • 187. study perldoc
  • 188. studymy $re = qr{...выражение...};my $str = q{...long complex...};$str =~ $re; # slow!!study $str; # does stuff$str =~ $re; # fast!! perldoc
  • 189. studymy $re = qr{...выражение...};my $str = q{...длинная строка...};$str =~ $re; # slow!!study $str; # does stuff$str =~ $re; # fast!! perldoc
  • 190. studymy $re = qr{...выражение...};my $str = q{...длинная строка...};$str =~ $re; # медленно!!study $str; # does stuff$str =~ $re; # fast!! perldoc
  • 191. studymy $re = qr{...выражение...};my $str = q{...длинная строка...};$str =~ $re; # медленно!!study $str; # используем$str =~ $re; # fast!! perldoc
  • 192. studymy $re = qr{...выражение...};my $str = q{...длинная строка...};$str =~ $re; # медленно!!study $str; # используем$str =~ $re; # быстро!! perldoc
  • 193. studymy $re = qr{...выражение...};my $str = q{...длинная строка...};$str =~ $re; # медленно, но верно!!study $str; # используем$str =~ $re; # кто знает!! perldoc
  • 194. studymy $re = qr{...выражение...};my $str = q{...длинная строка...};$str =~ $re; # медленно, но верно!!study $str; # используем$str =~ $re; # медленно, но верно!! perldoc
  • 195. Замена модулей Modder Modlib
  • 196. Недавно появившиеся библиотеки в ядре• JSON• HTTP::Tiny• Module::Metadata• CPAN::Meta perlmodlib
  • 197. Недавно удалённые библиотеки• Devel::DProf• Switch• perl4 ядро• ...и другие perlmodlib
  • 198. Удалёнстарый функционал
  • 199. qw()for my $show qw(Smallville Lost V) { $tivo->cancel_pass( $show );} perlop
  • 200. qw()for my $show (qw(Smallville Lost V)) { $tivo->cancel_pass( $show );} perlop
  • 201. $[
  • 202. $[ — индекс первого элемента в массиве• можно сделать так, чтобы $array[1] возвращал первый элемент массива• разве это не круто?• это так же круто, как и шрифт Comic Sans perlvar
  • 203. $[ — индекс первого элемента в массиве• можно сделать так, чтобы $array[1] возвращал первый элемент массива• разве это не круто?• это так же круто, как и шрифт Comic Sans perlvar
  • 204. $[ — индекс первого элемента в массиве• можно сделать так, чтобы $array[1] возвращал первый элемент массива• разве это не круто?• это так же круто, как и шрифт Comic Sans perlvar
  • 205. $[ — индекс первого элемента в массиве• можно сделать так, чтобы $array[1] возвращал первый элемент массива• разве это не круто?• это так же круто, как и шрифт Comic Sans perlvar
  • 206. $[$[ = 1;for (1 .. $#array) { ...} perlvar
  • 207. $[for ($[ .. $#array) { ...} perlvar
  • 208. $[ Переназначена переменная $[.Вы идиот или типа того? at -e line 123. perlvar
  • 209. $[ Use of assignment to $[is deprecatedat -e line 123. perlvar
  • 210. defined @arr
  • 211. Вопросы?
  • 212. Спасибо за внимание!
  • 213. Оригинал «Whats New in Perl? v5.10 – v5.16»http://www.slideshare.net/rjbs/whats-new-in-perl-v510-v516

×