SlideShare a Scribd company logo
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

2017年春のPerl