SlideShare a Scribd company logo
2016 年の Perl
(Long version)
Kenichi Ishigaki
@charsbar
YAPC::Hokkaido 2016
Dec 10, 2016
Perl 5 in 2016
Perl 5.24 was
releasedSome of the notable changes:
• Hashbang redirection to Perl 6
• autoderef was gone, postderef in
• Unicode 8.0 support
• Lexical $_ has been removed
• /C/ character class has been removed
• Nested declarations are not disallowed
• chdir('') no longer chdirs home
• sysread()/syswrite() and :utf8 handles
• Performance enhancements
• Several security fixes
Good old hashbang redirection
$ cat > hello.sh
#!/bin/sh
echo "Hello, World";
$ perl hello.sh
Hello, World
$ cat > hello.pl
#!/usr/bin/env perl -w
print "Hello, Worldn";
$ perl hello.pl
Hello, World
New hashbang
redirection to Perl 6
$ cat > hello.p6
#!/home/ishigaki/.rakudobrew/bin/perl6
use v6;
say "Hello, World";
$ perl5200 hello.p6
Perl v6.0.0 required--this is only v5.20.0, stopped at hello.p6 line 2.
BEGIN failed--compilation aborted at hello.p6 line 2.
$ perl5240 hello.p6
Hello, World
auto-dereferencing
• push $arrayref //= [], $scalar;
• for (keys $hashref) { ... }
• introduced in 5.14
• experimental since 5.18
auto-dereferencing is gone
× push $blessed_arrayref, $scalar;
× for (keys $blessed_hashref) { ... }
× print "interpolates $arrayref";
• push $arrayref->@*, $scalar;
• push $blessed_arrayref->@*, $scalar;
• print "interpolates $arrayref->@*";
• experimental since 5.20
postderef is no longer
experimental
postderef is no longer
experimental
△ $undef->%* # warning
× $maybe_undef->%* // {}
○ ($maybe_undef // {})->%*
× keys ($maybe_hashref // {})->%*
○ keys (($maybe_hashref // {})->%*)
○ keys %{$maybe_hashref // {}} # shorter...
Unicode 8.0
plackup -MEncode -e 'use 5.024; sub {[
200,
["Content-Type" => "text/plain"],
[encode_utf8("N{TACO} N{POPCORN}")],
]}'
Unicode 8.0:
Emoji Modifier
plackup -MEncode -e 'use 5.024; sub {[
200,
["Content-Type" => "text/plain"],
[encode_utf8(
"N{WOMAN}" .
"N{EMOJI MODIFIER FITZPATRICK TYPE-5}" .
" " .
"N{MAN}"
)],
]}'
Lexical $_ has
been removed
• for my $_ (...) { ... }
• implicitly used in given/when ( ~ 5.16)
• has been experimental since 5.18.
• See perl5180delta for details
/C/ character class
has been removed
my $c = "N{U+3042}"; # あ
say unpack "H*", $c; # e38182
$c =~ /(.)/; say sprintf "%x", $1; # 3042
$c =~ /(C)/; say sprintf "%x", $1; # e3
$c =~ s/(CC)C/$1x84/; say $c; # い
• deprecated since 5.20
Nested declarations
are not disallowed
my ($x, my($y)); # croaks now
our (my $x); # ditto
chdir(undef) no longer
chdirs home
chdir(undef) or die "since 5.24";
# but with no warning
sysread()/syswrite() are
deprecated on :utf8 handles
use strict;
use warnings;
open my $fh, '<:encoding(cp932)', 'test.txt';
# works as you expect
read($fh, my $buf, 3);
# doesn't respect the encoding; now warns
sysread($fh, my $buf, 3);
Performance
enchancements
• The overhead of scope entry/exit is
considerably reduced
(subroutine calls, loops, and basic blocks
become all faster)
• /fixed-string/ become much faster (in many
cases)
• arithmetic become faster
Security fixes
• Perl 5.22 set a wrong umask before calling
mkstemp(3)
• Out of boundary access in Win32 path
handling (since 5.005)
• File::Spec::canonpath lost taint (since 5.20:
PathTools-3.47)
• Avoid accessing uninitialized memory in
win32 crypt()
• On duplicate environment variables from
environ[]
See perldelta
(perl5240delta)
for other changes
Some of the coming
features/changes
(Perl 5.26)
• Unescaped literal { in regexp is not allowed (5.25.1)
• Lexical subroutines are no longer experimental
(5.25.2)
• ${^ENCODING} has been removed (5.25.3)
• Unicode 9.0 support (5.25.3)
• Indented Here-documents (5.25.7)
• Build option to exclude . in @INC (5.25.7)
Unescaped literal
{ in regexp
$foo =~ /d{1,10}/; # ok
$foo =~ /d{1}/; # ok
$foo =~ /something{}/; # now dies
$foo =~ /something{/; # now dies
$foo =~ /something[{]/; # ok
$foo =~ /something{/; # ok
$foo =~ /{}/; # still ok
• deprecated since 5.16
Lexical subroutines are
no longer experimental
{
sub whatever {
my $x = shift;
my sub inner {
... do something with $x ...
}
inner();
}
}
perldoc perlsyn for details
• experimental since 5.18
${^ENCODING} has
been removed
× use encoding 'cp932';
○ use encoding 'cp932', Filter => 1;
Good old Here-documents
{
my ($key, $value) = qw/foo bar/;
my $json_template = << "END";
{"$key": "$value"}
END
}
Indented Here-documents
{
my ($key, $value) = qw/foo bar/;
my $json_template = <<~ "END";
{"$key": "$value"}
END
}
Build option to
exclude . in @INC
$ plenv install 5.25.7 -Ddefault_inc_excludes_dot
• Beware if you use inc::Module::Install, t:: for testing
libraries, do "localfile.pl" for configuration, etc.
• This issue would probably be mitigated somehow (by
toolchainers).
• Your system perl may have been built with the same
option for security reasons.
• FindBin is always your friend.
See perl525[1-9]delta
for other changes
Changes in the
Community
• Karen Pauley stepped down as TPF President
• Perl 5 Pumpking: Ricardo Signes to Sawyer X
• YAPC to The Perl Conferences
2017.06.18-23 (Alexandria, Virginia, USA)
2017.08.09-11 (Amsterdam, Netherlands)
Other Perl Events
happened in 2016
• Various Perl Workshops
(Dutch, German, French, Alpine, Barcelona,
London, DC-Baltimore, etc)
• QA Hackathon in Rugby
• meta::hack
• Perl Dancer Conference 2016
CPAN Status
• 12915 PAUSE IDs (JP: 601)
• 34607 Distributions
As of Dec 10, 2016
CPAN Status
As of Dec 10, 2016
Number of releases
Year Worldwide Japanese
2012 22647 1858
2013 25760 3225
2014 27269 1937
2015 22999 1108
2016 18898 731
CPAN Status
As of Dec 10, 2016
Number of released distributions
Year Worldwide Japanese
2012 6777 539
2013 7442 804
2014 7586 566
2015 6823 407
2016 5957 306
CPAN Status
As of Dec 10, 2016
Number of new distributions
Year Worldwide Japanese
2012 2947 (of 6777;43%) 248 (of 539;46%)
2013 2836 (of 7442;38%) 420 (of 804;52%)
2014 2805 (of 7586;37%) 220 (of 566;39%)
2015 2249 (of 6823;33%) 123 (of 407;30%)
2016 2072 (of 5957;35%) 77 (of 306;25%)
CPAN Status
As of Dec 10, 2016
Number of authors who released
Year Worldwide Japanese
2012 1758 123
2013 1803 150
2014 1716 130
2015 1553 115
2016 1371 95
CPAN Status
As of Dec 10, 2016
Number of authors who released something new
Year Worldwide Japanese
2012 1047 (of 1758;60%) 78 (of 123;63%)
2013 1012 (of 1803;56%) 113 (of 150;75%)
2014 898 (of 1716;52%) 78 (of 130;60%)
2015 734 (of 1553;47%) 66 (of 115;57%)
2016 608 (of 1371;44%) 38 (of 95;40%)
CPAN Status
App:: (375), Locale::CLDR::Locales:: (196),
Net:: (195), Dist::Zilla::Plugin:: (141),
Test:: (129), Bencher:: (119), Acme:: (117),
Mojolicious::Plugin:: (104), Data:: (104),
WWW:: (101), Text:: (77), WebService:: (68),
Dancer2:: (67), Alien:: (64), HTML:: (64),
DBIx:: (60), Math:: (60), File:: (59), Log::
(59)...
Notable namespaces updated in 2016
CPAN Status
Char:: (35), App:: (14), Test:: (13),
Plack::Middleware:: (12), Acme:: (10),
Data:: (8), WebService:: (8), Redis (7),
HTML:: (7), Net:: (7), Mojolicious::Plugin:: (6),
DBIx:: (5), WWW:: (5), Text:: (5), Perl:: (4),
SQL::(4), Net::Azure:: (4), AnyEvent (4),
Dist:: (4)...
Ditto by Japanese
Perl 6 in 2016
THE Christmas
has come!
... as Larry announced last year.
Now we have the
Christmas ROAST
• Repository Of All Spec Tests
• "6.c" branch/tag in perl6/roast
• We also have Rakudo that doesn't die
by "use v6.c".
$ perl6 -v
This is Rakudo version 2016.11 built on MoarVM version 2016.11
implementing Perl 6.c.
• say $*PERL.name; # Perl 6
• say $*PERL.version; # v6.c
• say $*PERL.compiler.name; # rakudo
• say $*PERL.compiler.version; # v2016.11
• say $*VM.name; # moar
• say $*VM.version; # v2016.11
Not everything is ready yet
"spectest" (made from roast) is fudged.
given $*DISTRO.name {
when "macosx" {
#?rakudo.jvm skip "file system events NYI? RT #124828"
subtest &macosx, "does watch-path work on Mac OS X";
}
default {
pass "Nothing reliable to test yet";
}
}
perl6/roast/S17-supply/watch-path.t
(for IO::Notification.watch-path)
However, Rakudo is
fairly STABLE now
... as long as you use the
tested features.
README for ROAST 6.c says:
Any tests that contain a "use
experimental" are not considered
part of the specification, and
their behavior is subject to
change. Anything not explicitly
tested here is experimental.
https://github.com/perl6/roast/blob/6.c/README#L8-L10
See the ROAST 6.c
when in doubt
• Design docs explain goals; not
the current status.
• 6.c-errata
Performance and
Reliability
Among others, Jonathan Worthington...
•completed his first 200-hours Perl 6 Performance and
Reliability Grant
•implemented heap snapshots in MoarVM
•improved lower-level (ie. largely MoarVM) performance
•fixed a number of memory leaks and concurrency bugs
•This Grant has been extended for another 200 hours.
http://news.perlfoundation.org/2016/08/perl-6-performance-and-
reliabi-1.html
According to a benchmark:
https://twitter.com/zoffix/status/796810512986238978
On other backends
Rakudo on JVM
• not included in Rakudo Star
distributions now
• much slower than Rakudo on
MoarVM but improving
Rakudo.js
• http://blogs.perl.org/users/pawel_murias/2016/10/update-on-
rakudojs.html
• http://blogs.perl.org/users/pawel_murias/2016/10/rakudojs-
update.html
• Work In Progress (P6 Grant)
• ECMAScript 6
Farewell to Parrot
• First Perl6 backend since 2001
• Related code was removed
from nqp
https://p6weekly.wordpress.com/2016/08/01/2016-31-an-end-of-
an-era/
Release Utilities
• Ticket Trakr
• IRC release bot
• http://blogs.perl.org/users/zoffix_znet/2016/08/i-botched-a-
perl-6-release-and-now-a-robot-is-taking-my-job.html
• https://github.com/rakudo/rakudo/blob/nom/docs/release_gu
ide_automated.md
TAP for Perl 6
• Tests in ROAST are written in
Perl 6, but p5 Test::Harness is
still used to run the tests.
• New TAP.pm6 has been
written to replace it.
https://p6weekly.wordpress.com/2016/08/22/2016-34-a-
quick-botch-from-cluj/
Some of the (coming)
features
Not only grammars and concurrency
but also...
• Unicode support, not just to
read/write
• TWEAK (equiv to BUILD of p5 Moose)
• lexical module loading
Unicode support
say 「こんにちはこんにちは」 ; # 半角「 」
のみ
my $ 税率 = 1.08; ($ 金額 ×$ 税率 ).say;
say 100² ÷ ⅕; # 50000;
say 100 ** 2 / unival("x[2155]");
TWEAK submethod
Consider you want to set "id"
automatically.
use v6.c;
class Foo {
has ($.x, $!id);
submethod BUILD() {
$!id = $!x * 2; # $!x is not set yet
}
method generated_id { $!id }
}
say Foo.new(x => 1).generated_id; # 0
TWEAK submethod
You can write like this, but...
use v6.c;
class Foo {
has ($.x, $!id);
submethod BUILD(:$!x) {
$!id = $!x * 2;
}
method generated_id { $!id }
}
say Foo.new(x => 1).generated_id; # 2
TWEAK submethod
use v6.c; # since 2016.11 (or v6.d when ready)
class Foo {
has ($.x, $!id);
submethod TWEAK() { # called after BUILDs
$!id = $!x * 2;
}
method generated_id { $!id }
}
say Foo.new(x => 1).generated_id; # 2
Lexical module load
not merged yet; this will break modules
that depend on old, Perl5-like behavior.
# A.pm6
class A {}
# B.pm6
use A;
class B {}
# test_lexical_module_load.pl6
use B;
A.new; # should die because A is not used here
Perl 6 Ecosystem
~750 modules as of 2016/12
https://modules.perl6.org/
Perl 6 Ecosystem
Don't worry: you can use numerous
Perl5 modules via Inline::Perl5.
use v6.c
use Inline::Perl5;
use DBI:from<Perl5>;
my $dbh = DBI.connect('dbi:Pg:database=test');
my $products = $dbh.selectall_arrayref(
'select * from products', {Slice => {}}
);
PSIXDISTS
Perl5 toolchain ignores distribution under
PAUSE_ID/Perl6/ directory.
http://cpan.metacpan.org/authors/id/P/PS/PSIXDISTS/Perl6/
Writing a Perl 6
module
$ panda install App::Mi6
$ mi6 new Your::Great::Module
Learning Perl 6
• Perl 6 Advent Calendars
https://perl6advent.wordpress.com/
See also tests under roast/integration/
http://qiita.com/advent-calendar/2016/perl6
http://qiita.com/advent-calendar/2015/perl6
• Perl 6 Introduction: http://ja.perl6intro.com
• RosettaCode
https://rosettacode.org/wiki/Category:Perl_6
• roast
• perl6.org
Perl 6 Books
Planned/In-Progress
• Learning Perl 6 (brian d foy)
https://www.kickstarter.com/projects/1422827986/learning-perl-6
• Perl 6 By Example (Moritz Lenz)
https://perlgeek.de/blog-en/perl-6/2016-book.html
Further Information
• Weekly changes in and around Perl 6
https://p6weekly.wordpress.com
• English videos about Perl 6 on YouTube
http://bit.ly/perl6_english_video
• WEB+DB PRESS Vol.93 「 Perl 6 の歩き
方」
http://gihyo.jp/dev/serial/01/perl-hackers-hub/003901
• About the next version (6.d)
https://github.com/perl6/specs/blob/master/v6d.pod
https://github.com/rakudo/rakudo/blob/nom/docs/language_
Thank you

More Related Content

What's hot (20)

KEY
Yapcasia2011 - Hello Embed Perl
Hideaki Ohno
 
ODP
The why and how of moving to PHP 5.5/5.6
Wim Godden
 
PDF
PL/Perl - New Features in PostgreSQL 9.0 201012
Tim Bunce
 
PPT
Working with databases in Perl
Laurent Dami
 
ODP
The why and how of moving to php 5.4
Wim Godden
 
ODP
Caching and tuning fun for high scalability @ FrOSCon 2011
Wim Godden
 
PDF
Perl Sucks - and what to do about it
2shortplanks
 
ODP
The why and how of moving to php 5.4/5.5
Wim Godden
 
KEY
Anatomy of a PHP Request ( UTOSC 2010 )
Joseph Scott
 
KEY
Kansai.pm 10周年記念 Plack/PSGI 入門
lestrrat
 
ODP
The why and how of moving to PHP 5.4/5.5
Wim Godden
 
PPTX
Php 7 hhvm and co
Pierre Joye
 
PPTX
Joy of Six - Discover the Joy of Perl 6
trexy
 
PPTX
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
Sheng-Hao Ma
 
ODP
Php in 2013 (Web-5 2013 conference)
julien pauli
 
PDF
Utility Modules That You Should Know About
joshua.mcadams
 
PDF
BSDM with BASH: Command Interpolation
Workhorse Computing
 
PDF
Hachiojipm11
Hideaki Ohno
 
PDF
Get your teeth into Plack
Workhorse Computing
 
PDF
IPC2010SE Doctrine2 Enterprise Persistence Layer for PHP
Guilherme Blanco
 
Yapcasia2011 - Hello Embed Perl
Hideaki Ohno
 
The why and how of moving to PHP 5.5/5.6
Wim Godden
 
PL/Perl - New Features in PostgreSQL 9.0 201012
Tim Bunce
 
Working with databases in Perl
Laurent Dami
 
The why and how of moving to php 5.4
Wim Godden
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Wim Godden
 
Perl Sucks - and what to do about it
2shortplanks
 
The why and how of moving to php 5.4/5.5
Wim Godden
 
Anatomy of a PHP Request ( UTOSC 2010 )
Joseph Scott
 
Kansai.pm 10周年記念 Plack/PSGI 入門
lestrrat
 
The why and how of moving to PHP 5.4/5.5
Wim Godden
 
Php 7 hhvm and co
Pierre Joye
 
Joy of Six - Discover the Joy of Perl 6
trexy
 
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
Sheng-Hao Ma
 
Php in 2013 (Web-5 2013 conference)
julien pauli
 
Utility Modules That You Should Know About
joshua.mcadams
 
BSDM with BASH: Command Interpolation
Workhorse Computing
 
Hachiojipm11
Hideaki Ohno
 
Get your teeth into Plack
Workhorse Computing
 
IPC2010SE Doctrine2 Enterprise Persistence Layer for PHP
Guilherme Blanco
 

Viewers also liked (6)

PPT
Json(::PP) is a-changing
charsbar
 
PPT
2017年夏のPerl
charsbar
 
PDF
Mojolicious::Liteを使ってみよう
charsbar
 
PPT
CPANの依存モジュールをもう少し正しく検出したい
charsbar
 
PPT
JSON, JSON::PP, and more
charsbar
 
PPT
2017年春のPerl
charsbar
 
Json(::PP) is a-changing
charsbar
 
2017年夏のPerl
charsbar
 
Mojolicious::Liteを使ってみよう
charsbar
 
CPANの依存モジュールをもう少し正しく検出したい
charsbar
 
JSON, JSON::PP, and more
charsbar
 
2017年春のPerl
charsbar
 
Ad

Similar to 2016年のPerl (Long version) (20)

PDF
Modern Perl for the Unfrozen Paleolithic Perl Programmer
John Anderson
 
PDF
Old Dogs & New Tricks: What's New With Perl5 This Century
John Anderson
 
PDF
Modern Perl for the Unfrozen Paleolithic Perl Programmer
John Anderson
 
PDF
Continuing Evolution of Perl: Highlights of ActivePerl 5.14
ActiveState
 
ODP
Whatsnew in-perl
daoswald
 
PDF
Perl 5.10
acme
 
PDF
Perl family: 15 years of Perl 6 and Perl 5
Michal Jurosz
 
KEY
Perl 5.16 and beyond
Jesse Vincent
 
PDF
What's new in Perl 5.12?
acme
 
ODP
Introduction to Modern Perl
Dave Cross
 
PDF
Old Dogs & New Tricks: What's New with Perl5 This Century
John Anderson
 
PDF
Enterprise Perl
Dave Cross
 
PPTX
Unit 1-introduction to perl
sana mateen
 
KEY
Perlの現在と未来 2010
lestrrat
 
PDF
perl
tutorialsruby
 
PDF
perl
tutorialsruby
 
PPT
Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12
ActiveState
 
PDF
Old Dogs & New Tricks: What's New with Perl5 This Century
All Things Open
 
PDF
Perl 5.14 for Pragmatists
Ricardo Signes
 
ODP
What's new in Perl 5.10?
acme
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
John Anderson
 
Old Dogs & New Tricks: What's New With Perl5 This Century
John Anderson
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
John Anderson
 
Continuing Evolution of Perl: Highlights of ActivePerl 5.14
ActiveState
 
Whatsnew in-perl
daoswald
 
Perl 5.10
acme
 
Perl family: 15 years of Perl 6 and Perl 5
Michal Jurosz
 
Perl 5.16 and beyond
Jesse Vincent
 
What's new in Perl 5.12?
acme
 
Introduction to Modern Perl
Dave Cross
 
Old Dogs & New Tricks: What's New with Perl5 This Century
John Anderson
 
Enterprise Perl
Dave Cross
 
Unit 1-introduction to perl
sana mateen
 
Perlの現在と未来 2010
lestrrat
 
Keeping up with Perl: Development, Upgrade and Deployment Options for Perl 5.12
ActiveState
 
Old Dogs & New Tricks: What's New with Perl5 This Century
All Things Open
 
Perl 5.14 for Pragmatists
Ricardo Signes
 
What's new in Perl 5.10?
acme
 
Ad

More from charsbar (15)

PPT
Common boolean class_for_perl5
charsbar
 
PPT
2018年夏のPerl5
charsbar
 
PDF
萬國之津梁
charsbar
 
PPT
perl language update
charsbar
 
PDF
2013年のCPANモジュール作成事情
charsbar
 
PDF
Analyze CPAN, Analyze Community
charsbar
 
PDF
Annual Report 2012
charsbar
 
PDF
DBD::SQLite
charsbar
 
PDF
CPANTS: Kwalitative website and its tools
charsbar
 
PPT
CPANTS 2012
charsbar
 
PPT
Revisiting ppm
charsbar
 
PPT
変数、リファレンス
charsbar
 
PPT
關於perl的 文件翻譯
charsbar
 
PPT
Practical Bug Reporting
charsbar
 
PPT
Top Tens of 2008/2009
charsbar
 
Common boolean class_for_perl5
charsbar
 
2018年夏のPerl5
charsbar
 
萬國之津梁
charsbar
 
perl language update
charsbar
 
2013年のCPANモジュール作成事情
charsbar
 
Analyze CPAN, Analyze Community
charsbar
 
Annual Report 2012
charsbar
 
DBD::SQLite
charsbar
 
CPANTS: Kwalitative website and its tools
charsbar
 
CPANTS 2012
charsbar
 
Revisiting ppm
charsbar
 
変数、リファレンス
charsbar
 
關於perl的 文件翻譯
charsbar
 
Practical Bug Reporting
charsbar
 
Top Tens of 2008/2009
charsbar
 

Recently uploaded (20)

PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PPT
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 

2016年のPerl (Long version)

  • 1. 2016 年の Perl (Long version) Kenichi Ishigaki @charsbar YAPC::Hokkaido 2016 Dec 10, 2016
  • 2. Perl 5 in 2016
  • 3. Perl 5.24 was releasedSome of the notable changes: • Hashbang redirection to Perl 6 • autoderef was gone, postderef in • Unicode 8.0 support • Lexical $_ has been removed • /C/ character class has been removed • Nested declarations are not disallowed • chdir('') no longer chdirs home • sysread()/syswrite() and :utf8 handles • Performance enhancements • Several security fixes
  • 4. Good old hashbang redirection $ cat > hello.sh #!/bin/sh echo "Hello, World"; $ perl hello.sh Hello, World $ cat > hello.pl #!/usr/bin/env perl -w print "Hello, Worldn"; $ perl hello.pl Hello, World
  • 5. New hashbang redirection to Perl 6 $ cat > hello.p6 #!/home/ishigaki/.rakudobrew/bin/perl6 use v6; say "Hello, World"; $ perl5200 hello.p6 Perl v6.0.0 required--this is only v5.20.0, stopped at hello.p6 line 2. BEGIN failed--compilation aborted at hello.p6 line 2. $ perl5240 hello.p6 Hello, World
  • 6. auto-dereferencing • push $arrayref //= [], $scalar; • for (keys $hashref) { ... } • introduced in 5.14 • experimental since 5.18
  • 7. auto-dereferencing is gone × push $blessed_arrayref, $scalar; × for (keys $blessed_hashref) { ... } × print "interpolates $arrayref";
  • 8. • push $arrayref->@*, $scalar; • push $blessed_arrayref->@*, $scalar; • print "interpolates $arrayref->@*"; • experimental since 5.20 postderef is no longer experimental
  • 9. postderef is no longer experimental △ $undef->%* # warning × $maybe_undef->%* // {} ○ ($maybe_undef // {})->%* × keys ($maybe_hashref // {})->%* ○ keys (($maybe_hashref // {})->%*) ○ keys %{$maybe_hashref // {}} # shorter...
  • 10. Unicode 8.0 plackup -MEncode -e 'use 5.024; sub {[ 200, ["Content-Type" => "text/plain"], [encode_utf8("N{TACO} N{POPCORN}")], ]}'
  • 11. Unicode 8.0: Emoji Modifier plackup -MEncode -e 'use 5.024; sub {[ 200, ["Content-Type" => "text/plain"], [encode_utf8( "N{WOMAN}" . "N{EMOJI MODIFIER FITZPATRICK TYPE-5}" . " " . "N{MAN}" )], ]}'
  • 12. Lexical $_ has been removed • for my $_ (...) { ... } • implicitly used in given/when ( ~ 5.16) • has been experimental since 5.18. • See perl5180delta for details
  • 13. /C/ character class has been removed my $c = "N{U+3042}"; # あ say unpack "H*", $c; # e38182 $c =~ /(.)/; say sprintf "%x", $1; # 3042 $c =~ /(C)/; say sprintf "%x", $1; # e3 $c =~ s/(CC)C/$1x84/; say $c; # い • deprecated since 5.20
  • 14. Nested declarations are not disallowed my ($x, my($y)); # croaks now our (my $x); # ditto
  • 15. chdir(undef) no longer chdirs home chdir(undef) or die "since 5.24"; # but with no warning
  • 16. sysread()/syswrite() are deprecated on :utf8 handles use strict; use warnings; open my $fh, '<:encoding(cp932)', 'test.txt'; # works as you expect read($fh, my $buf, 3); # doesn't respect the encoding; now warns sysread($fh, my $buf, 3);
  • 17. Performance enchancements • The overhead of scope entry/exit is considerably reduced (subroutine calls, loops, and basic blocks become all faster) • /fixed-string/ become much faster (in many cases) • arithmetic become faster
  • 18. Security fixes • Perl 5.22 set a wrong umask before calling mkstemp(3) • Out of boundary access in Win32 path handling (since 5.005) • File::Spec::canonpath lost taint (since 5.20: PathTools-3.47) • Avoid accessing uninitialized memory in win32 crypt() • On duplicate environment variables from environ[]
  • 20. Some of the coming features/changes (Perl 5.26) • Unescaped literal { in regexp is not allowed (5.25.1) • Lexical subroutines are no longer experimental (5.25.2) • ${^ENCODING} has been removed (5.25.3) • Unicode 9.0 support (5.25.3) • Indented Here-documents (5.25.7) • Build option to exclude . in @INC (5.25.7)
  • 21. Unescaped literal { in regexp $foo =~ /d{1,10}/; # ok $foo =~ /d{1}/; # ok $foo =~ /something{}/; # now dies $foo =~ /something{/; # now dies $foo =~ /something[{]/; # ok $foo =~ /something{/; # ok $foo =~ /{}/; # still ok • deprecated since 5.16
  • 22. Lexical subroutines are no longer experimental { sub whatever { my $x = shift; my sub inner { ... do something with $x ... } inner(); } } perldoc perlsyn for details • experimental since 5.18
  • 23. ${^ENCODING} has been removed × use encoding 'cp932'; ○ use encoding 'cp932', Filter => 1;
  • 24. Good old Here-documents { my ($key, $value) = qw/foo bar/; my $json_template = << "END"; {"$key": "$value"} END }
  • 25. Indented Here-documents { my ($key, $value) = qw/foo bar/; my $json_template = <<~ "END"; {"$key": "$value"} END }
  • 26. Build option to exclude . in @INC $ plenv install 5.25.7 -Ddefault_inc_excludes_dot • Beware if you use inc::Module::Install, t:: for testing libraries, do "localfile.pl" for configuration, etc. • This issue would probably be mitigated somehow (by toolchainers). • Your system perl may have been built with the same option for security reasons. • FindBin is always your friend.
  • 28. Changes in the Community • Karen Pauley stepped down as TPF President • Perl 5 Pumpking: Ricardo Signes to Sawyer X • YAPC to The Perl Conferences 2017.06.18-23 (Alexandria, Virginia, USA) 2017.08.09-11 (Amsterdam, Netherlands)
  • 29. Other Perl Events happened in 2016 • Various Perl Workshops (Dutch, German, French, Alpine, Barcelona, London, DC-Baltimore, etc) • QA Hackathon in Rugby • meta::hack • Perl Dancer Conference 2016
  • 30. CPAN Status • 12915 PAUSE IDs (JP: 601) • 34607 Distributions As of Dec 10, 2016
  • 31. CPAN Status As of Dec 10, 2016 Number of releases Year Worldwide Japanese 2012 22647 1858 2013 25760 3225 2014 27269 1937 2015 22999 1108 2016 18898 731
  • 32. CPAN Status As of Dec 10, 2016 Number of released distributions Year Worldwide Japanese 2012 6777 539 2013 7442 804 2014 7586 566 2015 6823 407 2016 5957 306
  • 33. CPAN Status As of Dec 10, 2016 Number of new distributions Year Worldwide Japanese 2012 2947 (of 6777;43%) 248 (of 539;46%) 2013 2836 (of 7442;38%) 420 (of 804;52%) 2014 2805 (of 7586;37%) 220 (of 566;39%) 2015 2249 (of 6823;33%) 123 (of 407;30%) 2016 2072 (of 5957;35%) 77 (of 306;25%)
  • 34. CPAN Status As of Dec 10, 2016 Number of authors who released Year Worldwide Japanese 2012 1758 123 2013 1803 150 2014 1716 130 2015 1553 115 2016 1371 95
  • 35. CPAN Status As of Dec 10, 2016 Number of authors who released something new Year Worldwide Japanese 2012 1047 (of 1758;60%) 78 (of 123;63%) 2013 1012 (of 1803;56%) 113 (of 150;75%) 2014 898 (of 1716;52%) 78 (of 130;60%) 2015 734 (of 1553;47%) 66 (of 115;57%) 2016 608 (of 1371;44%) 38 (of 95;40%)
  • 36. CPAN Status App:: (375), Locale::CLDR::Locales:: (196), Net:: (195), Dist::Zilla::Plugin:: (141), Test:: (129), Bencher:: (119), Acme:: (117), Mojolicious::Plugin:: (104), Data:: (104), WWW:: (101), Text:: (77), WebService:: (68), Dancer2:: (67), Alien:: (64), HTML:: (64), DBIx:: (60), Math:: (60), File:: (59), Log:: (59)... Notable namespaces updated in 2016
  • 37. CPAN Status Char:: (35), App:: (14), Test:: (13), Plack::Middleware:: (12), Acme:: (10), Data:: (8), WebService:: (8), Redis (7), HTML:: (7), Net:: (7), Mojolicious::Plugin:: (6), DBIx:: (5), WWW:: (5), Text:: (5), Perl:: (4), SQL::(4), Net::Azure:: (4), AnyEvent (4), Dist:: (4)... Ditto by Japanese
  • 38. Perl 6 in 2016
  • 39. THE Christmas has come! ... as Larry announced last year.
  • 40. Now we have the Christmas ROAST • Repository Of All Spec Tests • "6.c" branch/tag in perl6/roast • We also have Rakudo that doesn't die by "use v6.c".
  • 41. $ perl6 -v This is Rakudo version 2016.11 built on MoarVM version 2016.11 implementing Perl 6.c. • say $*PERL.name; # Perl 6 • say $*PERL.version; # v6.c • say $*PERL.compiler.name; # rakudo • say $*PERL.compiler.version; # v2016.11 • say $*VM.name; # moar • say $*VM.version; # v2016.11
  • 42. Not everything is ready yet "spectest" (made from roast) is fudged. given $*DISTRO.name { when "macosx" { #?rakudo.jvm skip "file system events NYI? RT #124828" subtest &macosx, "does watch-path work on Mac OS X"; } default { pass "Nothing reliable to test yet"; } } perl6/roast/S17-supply/watch-path.t (for IO::Notification.watch-path)
  • 43. However, Rakudo is fairly STABLE now ... as long as you use the tested features.
  • 44. README for ROAST 6.c says: Any tests that contain a "use experimental" are not considered part of the specification, and their behavior is subject to change. Anything not explicitly tested here is experimental. https://github.com/perl6/roast/blob/6.c/README#L8-L10
  • 45. See the ROAST 6.c when in doubt • Design docs explain goals; not the current status. • 6.c-errata
  • 46. Performance and Reliability Among others, Jonathan Worthington... •completed his first 200-hours Perl 6 Performance and Reliability Grant •implemented heap snapshots in MoarVM •improved lower-level (ie. largely MoarVM) performance •fixed a number of memory leaks and concurrency bugs •This Grant has been extended for another 200 hours. http://news.perlfoundation.org/2016/08/perl-6-performance-and- reliabi-1.html
  • 47. According to a benchmark: https://twitter.com/zoffix/status/796810512986238978
  • 49. Rakudo on JVM • not included in Rakudo Star distributions now • much slower than Rakudo on MoarVM but improving
  • 51. Farewell to Parrot • First Perl6 backend since 2001 • Related code was removed from nqp https://p6weekly.wordpress.com/2016/08/01/2016-31-an-end-of- an-era/
  • 52. Release Utilities • Ticket Trakr • IRC release bot • http://blogs.perl.org/users/zoffix_znet/2016/08/i-botched-a- perl-6-release-and-now-a-robot-is-taking-my-job.html • https://github.com/rakudo/rakudo/blob/nom/docs/release_gu ide_automated.md
  • 53. TAP for Perl 6 • Tests in ROAST are written in Perl 6, but p5 Test::Harness is still used to run the tests. • New TAP.pm6 has been written to replace it. https://p6weekly.wordpress.com/2016/08/22/2016-34-a- quick-botch-from-cluj/
  • 54. Some of the (coming) features Not only grammars and concurrency but also... • Unicode support, not just to read/write • TWEAK (equiv to BUILD of p5 Moose) • lexical module loading
  • 55. Unicode support say 「こんにちはこんにちは」 ; # 半角「 」 のみ my $ 税率 = 1.08; ($ 金額 ×$ 税率 ).say; say 100² ÷ ⅕; # 50000; say 100 ** 2 / unival("x[2155]");
  • 56. TWEAK submethod Consider you want to set "id" automatically. use v6.c; class Foo { has ($.x, $!id); submethod BUILD() { $!id = $!x * 2; # $!x is not set yet } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 0
  • 57. TWEAK submethod You can write like this, but... use v6.c; class Foo { has ($.x, $!id); submethod BUILD(:$!x) { $!id = $!x * 2; } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 2
  • 58. TWEAK submethod use v6.c; # since 2016.11 (or v6.d when ready) class Foo { has ($.x, $!id); submethod TWEAK() { # called after BUILDs $!id = $!x * 2; } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 2
  • 59. Lexical module load not merged yet; this will break modules that depend on old, Perl5-like behavior. # A.pm6 class A {} # B.pm6 use A; class B {} # test_lexical_module_load.pl6 use B; A.new; # should die because A is not used here
  • 60. Perl 6 Ecosystem ~750 modules as of 2016/12 https://modules.perl6.org/
  • 61. Perl 6 Ecosystem Don't worry: you can use numerous Perl5 modules via Inline::Perl5. use v6.c use Inline::Perl5; use DBI:from<Perl5>; my $dbh = DBI.connect('dbi:Pg:database=test'); my $products = $dbh.selectall_arrayref( 'select * from products', {Slice => {}} );
  • 62. PSIXDISTS Perl5 toolchain ignores distribution under PAUSE_ID/Perl6/ directory. http://cpan.metacpan.org/authors/id/P/PS/PSIXDISTS/Perl6/
  • 63. Writing a Perl 6 module $ panda install App::Mi6 $ mi6 new Your::Great::Module
  • 64. Learning Perl 6 • Perl 6 Advent Calendars https://perl6advent.wordpress.com/ See also tests under roast/integration/ http://qiita.com/advent-calendar/2016/perl6 http://qiita.com/advent-calendar/2015/perl6 • Perl 6 Introduction: http://ja.perl6intro.com • RosettaCode https://rosettacode.org/wiki/Category:Perl_6 • roast • perl6.org
  • 65. Perl 6 Books Planned/In-Progress • Learning Perl 6 (brian d foy) https://www.kickstarter.com/projects/1422827986/learning-perl-6 • Perl 6 By Example (Moritz Lenz) https://perlgeek.de/blog-en/perl-6/2016-book.html
  • 66. Further Information • Weekly changes in and around Perl 6 https://p6weekly.wordpress.com • English videos about Perl 6 on YouTube http://bit.ly/perl6_english_video • WEB+DB PRESS Vol.93 「 Perl 6 の歩き 方」 http://gihyo.jp/dev/serial/01/perl-hackers-hub/003901 • About the next version (6.d) https://github.com/perl6/specs/blob/master/v6d.pod https://github.com/rakudo/rakudo/blob/nom/docs/language_