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
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
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
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%)
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)
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
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/
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
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_