SlideShare a Scribd company logo
1 of 72
2017 年春の Perl
Kenichi Ishigaki
@charsbar
YAPC::Kansai 2017
Mar 4, 2017
2017 年春の Perl 5
Perl 5.24.1 が
ようやく出ました
2016-05-09 5.24.0
2016-07-17 5.24.1 RC1
2016-07-25 5.24.1 RC2
2016-08-11 5.24.1 RC3
2016-10-12 5.24.1 RC4
2017-01-02 5.24.1 RC5
2017-01-14 5.24.1
@INC の「 . 」問題
• 詳しくは後ほど
• 5.24.1 では本体同梱のツール
類を修正
• base モジュールについては仕
切り直して 5.24.2 で対応
• ベンダによっては他のバージョ
ンでもバックポートされている
Perl 6 への切り替え
機能が無効に
$ 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
$ 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
$ cat > hello.p6
#!/home/ishigaki/.rakudobrew/bin/perl6
use v6;
say "Hello, World";
$ perl5240 hello.p6
Hello, World
$ perl5241 hello.p6
Perl v6.0.0 required--this is only v5.24.1,
stopped at hello.p6 line 2.
BEGIN failed--compilation aborted at
hello.p6 line 2.
$ cat > hello.p6
#!/home/ishigaki/.rakudobrew/bin/perl6
use v6;
say "Hello, World";
$ perl5240 hello.p6
Hello, World
$ perl5241 hello.p6
Perl v6.0.0 required--this is only v5.24.1,
stopped at hello.p6 line 2.
BEGIN failed--compilation aborted at
hello.p6 line 2.
Perl 5.24 系の
主な変更点
配列・ハッシュ操作関数の
自動デリファレンス機能は削
除5.14 で実験的に導入されたものの、制約も多かったため
5.24.0 で削除
push $arrayref //= [], $scalar;
for (keys $hashref) { ... }
push $arrayref //= [], $scalar;
for (keys $hashref) { ... }
× push $blessed_arrayref, $scalar;
× for (keys $blessed_hashref) { ... }
× print "interpolates $arrayref";
× push $blessed_arrayref, $scalar;
× for (keys $blessed_hashref) { ... }
× print "interpolates $arrayref";
後置デリファレンス
が正式機能に格上げ
5.20 で実験的に導入されたもの
push $arrayref->@*, $scalar;
push $blessed_arrayref->@*, $scalar;
print "interpolates $arrayref->@*";
push $arrayref->@*, $scalar;
push $blessed_arrayref->@*, $scalar;
print "interpolates $arrayref->@*";
優先順位には要注意
△ $undef->%* # 警告
× $maybe_undef->%* // {}
○ ($maybe_undef // {})->%*
× keys ($maybe_hashref // {})->%*
○ keys (($maybe_hashref // {})->%*)
○ keys %{$maybe_hashref // {}} # shorter
△ $undef->%* # 警告
× $maybe_undef->%* // {}
○ ($maybe_undef // {})->%*
× keys ($maybe_hashref // {})->%*
○ keys (($maybe_hashref // {})->%*)
○ keys %{$maybe_hashref // {}} # shorter
あらかじめ undef にならないよう値を入れておきましょう
Unicode 8.0 サポート
plackup -MEncode -e 'use 5.024; sub {[
200,
["Content-Type" => "text/plain"],
[encode_utf8("N{TACO} N{POPCORN}")],
]}'
plackup -MEncode -e 'use 5.024; sub {[
200,
["Content-Type" => "text/plain"],
[encode_utf8("N{TACO} N{POPCORN}")],
]}'
http://emojione.com
iOS 9.1 / OS X 10.11.1 / Android 6.0.1 などがすでにサポート済み
Unicode 8.0: 肌色修飾
子
plackup -MEncode -e 'use 5.024; sub {[
200,
["Content-Type" => "text/plain"],
[encode_utf8(
"N{WOMAN}" . "N{EMOJI MODIFIER FITZPATRICK TYPE-5}" .
" " .
"N{MAN}"
)],
]}'
plackup -MEncode -e 'use 5.024; sub {[
200,
["Content-Type" => "text/plain"],
[encode_utf8(
"N{WOMAN}" . "N{EMOJI MODIFIER FITZPATRICK TYPE-5}" .
" " .
"N{MAN}"
)],
]}'
http://emojione.com
正規表現中の
「 C 」文字クラ
スは削除文字列の内部表現を変更できたりするので 5.20 で廃止
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; # い
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; # い
:utf8 レイヤ付きハンドルへの
sysread()/syswrite() は廃止
これも同じく文字列境界を無視してしまうので
use strict;
use warnings;
open my $fh, '<:encoding(cp932)', 'test.txt';
# こちらは正しく「文字単位」
read($fh, my $buf, 3);
# こちらは「文字単位」にならないので警告
sysread($fh, my $buf, 3);
use strict;
use warnings;
open my $fh, '<:encoding(cp932)', 'test.txt';
# こちらは正しく「文字単位」
read($fh, my $buf, 3);
# こちらは「文字単位」にならないので警告
sysread($fh, my $buf, 3);
レキシカル $_ は
削除されました
for my $_ (...) { ... }for my $_ (...) { ... }
• given/when のために 5.10 で導入されたもの
の、いろいろ混乱させたため 5.18 で実験的
機能に格下げされ、 5.24 で削除
• 詳しい経緯は perl5180delta 参照
変数宣言はネスト不可に
my ($x, my($y)); # エ
ラー
our (my $x); # 同じ
く
my ($x, my($y)); # エ
ラー
our (my $x); # 同じ
く
chdir(undef) など
の扱いが変更に
ホームディレクトリには移動しないようになりました
chdir($undef) or die "since 5.24"
# 警告なし
chdir($undef) or die "since 5.24"
# 警告なし
パフォーマンスの改善
• スコープ(サブルーチン、ルー
プ、ブロックなど)の出入りが
かなり速くなりました
• / 固定文字列 / のマッチもか
なり速くなっています
• 64 ビット対応以降遅くなって
いた四則演算も多くの場合高速
セキュリティ対応
• 5.22 で一時ディレクトリ作成時に umask
がおかしくなっていた件
• 5.005 時代から Win32 のボリュームラベル
の扱いに問題があった件
• 5.20 以降 File::Spec の canonpath が外部
データの汚染情報が消えていた件
• Win32 の crypt() で条件によっては一般保
護違反が起こっていた件
• 環境変数に重複があった場合の挙動
もろもろ修正されています
version.pm の挙動が微妙に
変化 (0.9913 ~ )
https://twitter.com/syohex/status/821956819824148481
Lyon Compromise (2014)
https://gist.github.com/dagolden/9559280
詳しくは perldelta
(perl5240delta) を
参照
Perl 5.24.2/3 で予
定されているもの
• 5.24.2 は早ければ近日中にも
リリースの見込み
• base モジュールの「 . 」対応
• 5.24.3 では Time::HiRes の
Sierra 対応などがバックポート
される見込み
Perl 5.26 で予定
されているもの
正規表現中の { の扱いが変更に
5.16 で廃止、 5.22 以降警告が出ていたのが死ぬように
$foo =~ /d{1,10}/; # ok
$foo =~ /d{1}/; # ok
$foo =~ /something{}/; # 5.26 ではエ
ラー
$foo =~ /something{/; # 5.26 ではエ
ラー
$foo =~ /something[{]/; # ok
$foo =~ /something{/; # ok
$foo =~ /d{1,10}/; # ok
$foo =~ /d{1}/; # ok
$foo =~ /something{}/; # 5.26 ではエ
ラー
$foo =~ /something{/; # 5.26 ではエ
ラー
$foo =~ /something[{]/; # ok
$foo =~ /something{/; # ok
$foo =~ /{}/; # これも ok
レキシカルサブルーチン
が正式化
5.18 で実験的に導入。詳しくは perldoc perlsub
{
sub whatever {
my $x = shift;
my sub inner {
... do something with $x ...
}
inner();
}
}
{
sub whatever {
my $x = shift;
my sub inner {
... do something with $x ...
}
inner();
}
}
${^ENCODING} は削除
2015 年の YAPC で Yappo さんがおっしゃっていた通り
× use encoding 'cp932';
○ use encoding 'cp932', Filter => 1;
× use encoding 'cp932';
○ use encoding 'cp932', Filter => 1;
Unicode 9.0 サポート
plackup -MEncode -e 'use 5.025003; sub {[
200,
["Content-Type" => "text/plain"],
[encode_utf8(join ' ',
"N{FIRST PLACE MEDAL}",
"N{TUMBLER GLASS}",
"N{SNEEZING FACE}")],
]}'
plackup -MEncode -e 'use 5.025003; sub {[
200,
["Content-Type" => "text/plain"],
[encode_utf8(join ' ',
"N{FIRST PLACE MEDAL}",
"N{TUMBLER GLASS}",
"N{SNEEZING FACE}")],
]}'
http://emojione.com
ヒアドキュメントが
インデント可能に
{
my ($key, $value) = qw/foo bar/;
my $json_template = << "END";
{"$key": "$value"}
END
}
{
my ($key, $value) = qw/foo bar/;
my $json_template = <<~ "END";
{"$key": "$value"}
END
}
{
my ($key, $value) = qw/foo bar/;
my $json_template = << "END";
{"$key": "$value"}
END
}
{
my ($key, $value) = qw/foo bar/;
my $json_template = <<~ "END";
{"$key": "$value"}
END
}
@INC から「 . 」が消
える見込みです
$ plenv install 5.25.10 -Ddefault_inc_excludes_dot$ plenv install 5.25.10 -Ddefault_inc_excludes_dot
• いまのところはコンパイル時にフラグ必要
• セキュリティ問題なので断固実現とのこと
• inc::Module::Install や、テスト中の t:: 、環境設定用
の do "localfile.pl" などを使っている方は要注意
• 環境変数 PERL_USE_UNSAFE_INC=1 を使えば一時的な
対応も可能
• 主要な CPAN インストーラなどには対応するパッチが
送られています
• 迷ったら FindBin を使うか、絶対パス指定に
詳しくは
perl525[1-0]+delta
を参照
ところで
2017 年 3 月
…といえば
CentOS 5 終了
さすがにそろそろ Perl 5.8 は
… ?
Debian
7.0 (wheezy; EOL 2018-05): 5.14.2
8.0 (jessie; EOL 2020-05): 5.20.2
Ubuntu
12.04 (precise; EOL 2017-04): 5.14.2
14.04 (trusty; EOL 2019-04): 5.18.2
16.04 (xenial; EOL 2021-04): 5.22.1
Fedora
24 (EOL -------): 5.22.2
25 (EOL -------): 5.24.0
RHEL/CentOS
5.11 (EOL 2017-03): 5.8.8
6.8 (EOL 2020-11): 5.10.1
7.3 (EOL 2024-06): 5.16.3
FreeBSD
10.3 (EOL 2018-04): 5.20.2
11.0 (EOL -------): 5.20.3
http://distrowatch.com/search.php?
pkg=perl&relation=similar&pkgver=&distrorange=InAny#pkgsearch
…と思いきや
Debian
7.0 (wheezy; EOL 2018-05): 5.14.2
8.0 (jessie; EOL 2020-05): 5.20.2
Ubuntu
12.04 (precise; EOL 2017-04): 5.14.2
14.04 (trusty; EOL 2019-04): 5.18.2
16.04 (xenial; EOL 2021-04): 5.22.1
Fedora
24 (EOL -------): 5.22.2
25 (EOL -------): 5.24.0
RHEL/CentOS
5.11 (ELS 2020-11): 5.8.8
6.8 (EOL 2020-11): 5.10.1
7.3 (EOL 2024-06): 5.16.3
FreeBSD
10.3 (EOL 2018-04): 5.20.2
11.0 (EOL -------): 5.20.3
Solaris
10 (EOL 2018-01): 5.8.4
11.3 (EOL 2031-11): 5.12.5
どのバージョンを
使えばいいのか ?
• 互換性やセキュリティの問題に対応できるな
ら、どれでもお好きなように
• システムのはベンダが面倒を見てくれている
はず
• p5p のサポートは原則直近 2 バージョンのみ
(perlpolicy)
• いまなら 5.22 と 5.24 。夏までには 5.24 と
5.26 に
開発が進められている中で動かな
くなるものが出てきているのは本
当
• 有名どころでは jcode.pl が 5.22 以
降 defined(%hash) 問題で死ぬよう
に
• 5.22 からはコアから削除される
モジュールもちょこちょこ出てき
ました
• Perl 5.25.9 からは将来の廃止予定
が文書の形で公開されています
なるべく互換性を壊さな
い努力は行われています
• BBC (Blead Breaks CPAN) : Perl のリ
リースごとに全 CPAN モジュールのス
モークテスト
• 一般的な CPAN モジュールを使ってい
る限り、サポートされているバージョ
ンまで上げてもそれほど問題にはなら
ないはず
• Perl 5.22.3 では最新の Coro が入ります
積極的な改善も
粛々と
FOSDEM ではサブルーチ
ンシグネチャの高速化が
話題になっていました
• 5.26 ではシグネチャがシグネチャ
なしのコードと同じくらいの速度
に
• 将来のバージョンではシグネチャ
を使った方が速くなるようになる
予定
http://ftp.fau.de/fosdem/2017/K.4.201/perl5_future.mp4
もちろん高速化の
やり方だってひと
つではありません
そもそも本当にボトルネックは Perl 本体なのか
、と
YAPC::Hokkaido では Rust で
XS を書くというネタがありま
した
見逃した方は YAPC::NA や YAPC::EU の録
画で
https://www.youtube.com/watch?v=GwS8eDOYz_U
https://www.youtube.com/watch?v=EZfm5rEnqBc
CPAN には Rust と FFI で高速な拡張を用意するモジュールなども
(FFI::Platypus::Lang::Rust)
RPerl のように特殊な方法で
高速化を図る例も
• シンプルに書かれた Perl のソースコードを C+
+ に変換することで高速化
• 対応している書き方はかなり限られているの
で、恩恵を受けられないコードも多そうです
…が
• Perl Foundation から助成金を受けてドキュメ
ント整備されました
http://rperl.org
https://metacpan.org/release/RPerl
他の言語やツールに
処理を委譲する手も
• なんでも自前で用意する必要はありませんよ
ね
• Inline::C とか、機械学習なら Inline::Python
とか、必要なところだけ別言語で書く選択肢
もあります
• Inline 系のモジュールを使わなくても、普通
は JSON や DB 経由でも十分でしょう
• つなげないものがあったらつなげるようにし
解決されるとうれしい問題が
あったら、とりあえずサンプ
ルを
• もっといい実装が出てくる
かも
• コア側でフック先を用意し
てもらえるかも ( キーワー
ドプラグインやカスタム Op
Stevan Little 氏は新しい
MOP システムなどを紹介
• UNIVERSAL::Object (Perl 5.6.0)
• B::CompilerPhase::Hook
• BEGIN::Lift
• MOP (Perl 5.10.0)
• Method::Traits (Perl 5.14.5)
• Moxie (Perl 5.22)
http://ftp.fau.de/fosdem/2017/K.4.201/damnit_stevan.mp4
package Point {
use Moxie;
extends 'Moxie::Object';
has '$!x' => sub { 0 };
has '$!y' => sub { 0 };
sub BUILDARGS : init_args(
x => '$!x',
y => '$!y',
);
sub x : ro('$!x');
sub y : ro('$!y');
sub set_x : wo('$!x');
sub set_y : wo('$!y');
sub clear ($self) {
@{ $self }{'$!x', '$!y'} = (0, 0);
}
sub pack ($self) {
+{ x => $self->x, y => $self->y }
}
}
package Point {
use Moxie;
extends 'Moxie::Object';
has '$!x' => sub { 0 };
has '$!y' => sub { 0 };
sub BUILDARGS : init_args(
x => '$!x',
y => '$!y',
);
sub x : ro('$!x');
sub y : ro('$!y');
sub set_x : wo('$!x');
sub set_y : wo('$!y');
sub clear ($self) {
@{ $self }{'$!x', '$!y'} = (0, 0);
}
sub pack ($self) {
+{ x => $self->x, y => $self->y }
}
}
https://github.com/stevan/p5-Moxie/blob/master/t/000-samples/001-point.t
2017 年春の Perl 6
約束された「クリスマ
ス」から一年が経ちま
した
「ロースト」のお
味、試してみまし
たか?• 巷ではよく雑に「 Perl 6 が出た」とい
…う話がされますが
• Perl 6 では実装と仕様が明確に分かれ
ています
• ラリーが「クリスマス」に持ってきて
くれたのは「公式テスト (Repository Of
All Spec Tests) 」のクリスマス・バー
$ perl6 -v
This is Rakudo version 2017.02 built on MoarVM version 2017.02
implementing Perl 6.c.
This is Rakudo version 2017.02 built on MoarVM version 2017.02
implementing Perl 6.c.
• say $*PERL.version; # v6.c
• say $*PERL.name; # Perl 6
• say $*PERL.compiler.version;   # v2017.02
• say $*PERL.compiler.name; # rakudo
• say $*VM.version;     # v2017.02
• say $*VM.name; # moar
• say $*PERL.version; # v6.c
• say $*PERL.name; # Perl 6
• say $*PERL.compiler.version;   # v2017.02
• say $*PERL.compiler.name; # rakudo
• say $*VM.version;     # v2017.02
• say $*VM.name; # moar
use 文で制御できるのは v6.c の部分だけ
最終的な目標をすべて達成できて
いるわけではありません
ROAST から切り出される各実装向けのテストにはいろい
ろと分岐なども残っています
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";
}
}
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)
テストされている機能につい
てはそれなりに「安定」して
いるはず
• ROAST 6.c の README にも明記されています
が、テストされていないものは「仕様」では
ありません
• 疑問に思ったら設計文書ではなく公式仕様テ
ストをご確認ください
IOwesomeness
IO まわりのインタフェースの統一・改善のため、近々既
存のアプリが壊れるかもしれない変更が入る見込みです
• ただし、定義上公式テストでテストされていない機能
はすべて「実験的な機能」なので、本当に「 6.c 」が
壊れることになるかは不明
• 現時点でわかっている link() と seek() については 6.c
ではテストされていません
• 6.c 対応の既存アプリに重大な影響を及ぼしそうな変
更については 6.d に持ち越される可能性も
今後のスケジュール
2017 年 3 月 18 日:コアチーム内で仕様確定(その後ユーザ向け情報
公開)
2017 年 4 月 15 日:対応を完了させて Rakudo 2017.04 リリース予定
開発はいまも活発
に続いています
FOSDEM 時点での「クリスマス」以降のコミッ
ト概数 :
•MoarVM: 1000
•NQP: 1300
•Rakudo: 3300
•ドキュメント類 : 3200
( 約 22 コミット / 日 )
http://ftp.fau.de/fosdem/2017/K.4.201/faaaaster.mp4
2016 年は高速化と
信頼性の向上に注力
• Jonathan Worthington 氏が 200 時間 ( + 200
時間 ) の助成金を受けて低レベル部分を改善
• 2016 年 5 月時点で 52263 件の仕様テストに
254 秒かかっていたのが、 2017 年 2 月には
55871 件のテストが 166 秒に ( 約 1.5 倍の高
速化 )
• 2015 年 12 月に 14 秒かかっていた Text::CSV
のテストは (1 箇所変更しただけで )2017 年 2
2017 年には MoarVM
の JIT 機能や grammar
の高速化なども取り込
まれる見込みです
新機能も少しずつ
増えてきています
TWEAK サブメソッ
ドPerl 6 の BUILD は Moose の BUILDARGS 相当
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
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 サブメソッ
ド…こう書いてもよいのですが
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
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 サブメソッ
ドMoose の BUILD 相当のものが新設されました
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
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
モジュールの読み込みが
レキシカルスコープに
A.pm6
use A;
class B {}
use A;
class B {}
use B;
A.new; # die since 2017.01
use B;
A.new; # die since 2017.01
• これによってアプリ内
で複数バージョンの同
じモジュールを利用す
ることができるように
• Rakudo のバージョンを
上げてもモジュールの
再インストールは不要
• rakudobrew で切り替え
るよりシステムにイン
ストールしてしまう方
class A {}class A {}
B.pm6
lexical_module_load.pl6
Unicode サポート
say 「こんにちはこんにちは」 ; # 半角「 」
のみ
my $ 税率 = 1.08; ($ 金額 ×$ 税率 ).say;
say 100² ÷ ⅕; # 50000;
say 100 ** 2 / unival("x[2155]");
say 「こんにちはこんにちは」 ; # 半角「 」
のみ
my $ 税率 = 1.08; ($ 金額 ×$ 税率 ).say;
say 100² ÷ ⅕; # 50000;
say 100 ** 2 / unival("x[2155]");
Unicode サポート
perl5 -E 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"' # 2
perl6 -e 'say "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]".chars' # 1
perl6 -e 'say "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]".codes' # 2
perl5 -E 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"' # 2
perl6 -e 'say "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]".chars' # 1
perl6 -e 'say "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]".codes' # 2
Perl 6 なら合字も正しく扱えます
親切なエラーメッセー
ジPerl 5 ユーザがやらかしがちなミスは実行
時に正しい書き方を教えてくれます
perl5 -E 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"'perl5 -E 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"'
perl6 -e 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"'
# Unsupported use of N{CHARNAME}; in Perl 6 please use c[CHARNAME]
perl6 -e 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"'
# Unsupported use of N{CHARNAME}; in Perl 6 please use c[CHARNAME]
perl6 -e 'say length "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]"'
# Undeclared routine:
# length used at line 1. Did you mean 'elems', 'chars', 'graphs', 'codes'?
perl6 -e 'say length "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]"'
# Undeclared routine:
# length used at line 1. Did you mean 'elems', 'chars', 'graphs', 'codes'?
6.d.PREVIEW
• Rakudo 2017.02 からは最初の 6.c 非互
換機能となる nonblocking await の実装
が入っています
• 試す場合は use v6.d.PREVIEW; で
https://github.com/perl6/roast/blob/master/S17-supply/syntax-nonblocking-await.t
MoarVM 以外のバッ
クエンドについて
• JVM: 6.d.PREVIEW で壊れた部分を修正
• JavaScript: say "Hello, World" に成功、
ROAST テストに通り始めている状況
http://blogs.perl.org/users/pawel_murias/2017/02/rakudojs-update---we-
passed-a-first-roast-test.html
• Rakudo 以外の古い実装用の分岐は公式
テストから削除されました
https://github.com/perl6/roast/issues/235
• Parrot 関連コードは 2016.07 に削除
エコシステム
https://modules.perl6.org/
•2017 年 3 月の時点で 780 くらい
•最終更新が「クリスマス」以前のものは動かな
いかも
•困ったら Inline::Perl5 で CPAN のモジュールを
頼る手も
http://niner.name/talks/Web%20development%20and%20Perl%206/Web
%20development%20and%20Perl%206.pdf
Perl 6 のモジュールを書
く
$ zef install App::Mi6
$ mi6 new Your::Great::Module
$ zef install App::Mi6
$ mi6 new Your::Great::Module
とりあえず何か書いてみたいという方は
skaji さんの App::Mi6 を
ネタが思いつかない方は「 Most Wanted
Modules 」が参考になるはず
https://github.com/perl6/perl6-most-wanted/blob/master/most-
wanted/modules.md
これから学ぶなら
当面はググるよりも信頼できる情報源を頼るの
が吉
•Perl 6 の各種アドベントカレンダー
– https://perl6advent.wordpress.com/
roast/integration/ 以下のテストも参照
– http://qiita.com/advent-calendar/2016/perl6
– http://qiita.com/advent-calendar/2015/perl6
•Perl 6 入門 : http://ja.perl6intro.com
•RosettaCode
https://rosettacode.org/wiki/Category:Perl_6
•公式テスト
•perl6.org
6.c 対応の書籍も続々
と書かれています
• Perl 6 at a Glance (Andrew Shitov; 2017.01.01)
https://deeptext.media/perl6-at-a-glance/
• Think Perl 6
(Laurent Rosenfeld, Allen B. Downey; 2017.05.25)
http://shop.oreilly.com/product/0636920065883.do
• Learning Perl 6 (brian d foy)
https://www.lerningperl6.com
• Perl 6 By Example (Moritz Lenz)
https://leanpub.com/perl6
その他の情報源
• Weekly changes in and around Perl 6
https://p6weekly.wordpress.com
• https://twitter.com/perl6org
• Youtube の Perl 6 関連ビデオ
http://bit.ly/perl6_english_video
• 次期バージョンについて
– https://github.com/perl6/specs/blob/master/v6d.pod
– https://github.com/rakudo/rakudo/blob/nom/docs/language_versions.md
• WEB+DB PRESS Vol.93 「 Perl 6 の歩き方」
http://gihyo.jp/dev/serial/01/perl-hackers-hub/003901
2017 年の主要海外
Perl 関連イベント
• The Perl Conferences (YAPC)
– 2017.06.18-23 (Alexandria, Virginia, USA)
– 2017.08.09-11 (Amsterdam, Netherlands)
• German Perl Workshop 2017
2017.03.08-12 (Nuremberg, Germany)
• Perl Toolchain Summit
2017.05.11-14 (Lyon, France)
• French Perl Workshop
2017.06.09-10 (Paris, France)
Questions?

More Related Content

What's hot

『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合
hiboma
 
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
Naoya Ito
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 

What's hot (20)

php7's ast
php7's astphp7's ast
php7's ast
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合
 
AOSPをミラーしてみた
AOSPをミラーしてみたAOSPをミラーしてみた
AOSPをミラーしてみた
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESI
 
Fluentdの使い方
Fluentdの使い方Fluentdの使い方
Fluentdの使い方
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
Everyday Life with clojure.spec
Everyday Life with clojure.specEveryday Life with clojure.spec
Everyday Life with clojure.spec
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
 
Rake
RakeRake
Rake
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまで
 

Similar to 2017年春のPerl

Rails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2editionRails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2edition
Satomi Tsujita
 

Similar to 2017年春のPerl (20)

PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011
 
2018年夏のPerl5
2018年夏のPerl52018年夏のPerl5
2018年夏のPerl5
 
Firefox with HTML+CSS
Firefox with HTML+CSSFirefox with HTML+CSS
Firefox with HTML+CSS
 
ES6 in Practice
ES6 in PracticeES6 in Practice
ES6 in Practice
 
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
 
Rails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2editionRails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2edition
 
ElixirをIoTボードで動かしてみた ~ラズパイ・big.LITTLE・Zynq編~
ElixirをIoTボードで動かしてみた ~ラズパイ・big.LITTLE・Zynq編~ElixirをIoTボードで動かしてみた ~ラズパイ・big.LITTLE・Zynq編~
ElixirをIoTボードで動かしてみた ~ラズパイ・big.LITTLE・Zynq編~
 
Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話
 
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
 
Web Platform -- Moving Forward!
Web Platform -- Moving Forward!Web Platform -- Moving Forward!
Web Platform -- Moving Forward!
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021
 
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
 
zsh とわたし
zsh とわたし zsh とわたし
zsh とわたし
 
20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScript
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
 
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
 

More from charsbar

CPANTS 2012
CPANTS 2012CPANTS 2012
CPANTS 2012
charsbar
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみよう
charsbar
 

More from charsbar (20)

Common boolean class_for_perl5
Common boolean class_for_perl5Common boolean class_for_perl5
Common boolean class_for_perl5
 
萬國之津梁
萬國之津梁萬國之津梁
萬國之津梁
 
Better detection of what modules are used by some Perl 5 code
Better detection of what modules are used by some Perl 5 codeBetter detection of what modules are used by some Perl 5 code
Better detection of what modules are used by some Perl 5 code
 
Json(::PP) is a-changing
Json(::PP) is a-changingJson(::PP) is a-changing
Json(::PP) is a-changing
 
2016年のPerl (Long version)
2016年のPerl (Long version)2016年のPerl (Long version)
2016年のPerl (Long version)
 
JSON, JSON::PP, and more
JSON, JSON::PP, and moreJSON, JSON::PP, and more
JSON, JSON::PP, and more
 
perl language update
perl language updateperl language update
perl language update
 
2013年のCPANモジュール作成事情
2013年のCPANモジュール作成事情2013年のCPANモジュール作成事情
2013年のCPANモジュール作成事情
 
What you need to remember when you upload to CPAN
What you need to remember when you upload to CPANWhat you need to remember when you upload to CPAN
What you need to remember when you upload to CPAN
 
On UnQLite
On UnQLiteOn UnQLite
On UnQLite
 
typemap in Perl/XS
typemap in Perl/XS  typemap in Perl/XS
typemap in Perl/XS
 
Analyze CPAN, Analyze Community
Analyze CPAN, Analyze CommunityAnalyze CPAN, Analyze Community
Analyze CPAN, Analyze Community
 
Annual Report 2012
Annual Report 2012Annual Report 2012
Annual Report 2012
 
DBD::SQLite
DBD::SQLiteDBD::SQLite
DBD::SQLite
 
CPANTS: Kwalitative website and its tools
CPANTS: Kwalitative website and its toolsCPANTS: Kwalitative website and its tools
CPANTS: Kwalitative website and its tools
 
CPANTS 2012
CPANTS 2012CPANTS 2012
CPANTS 2012
 
Revisiting ppm
Revisiting ppmRevisiting ppm
Revisiting ppm
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみよう
 
変数、リファレンス
変数、リファレンス変数、リファレンス
変数、リファレンス
 
關於perl的 文件翻譯
關於perl的文件翻譯關於perl的文件翻譯
關於perl的 文件翻譯
 

Recently uploaded

Recently uploaded (12)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

2017年春のPerl