Slide 1

Slide 1 text

2018年残暑のPerl Kenichi Ishigaki @charsbar Learn Language 2018 in ODC Aug 26, 2018

Slide 2

Slide 2 text

me • 2016年のPerl@LLoT • Perl in 2016@YAPC::Hokkaido • 2017年春のPerl@YAPC::Kansai • 2017年夏のPerl@YAPC::Fukuoka • (2018年初夏のPerl5)@Hokkaido.pm #14 • 2018年夏のPerl5@Shibuya.pm #18 • 2018年残暑のPerl@LL2018 <- イマココ

Slide 3

Slide 3 text

Perl 5.26/5.28が 出ています • https://metacpan.org/release/XSAWYERX/perl-5.26.0/ • https://metacpan.org/release/XSAWYERX/perl-5.28.0/

Slide 4

Slide 4 text

おもな変更点は perldelta参照 • https://metacpan.org/pod/release/XSAWYERX/perl-5.26.0/pod/perldelta.pod • https://metacpan.org/pod/release/XSAWYERX/perl-5.28.0/pod/perldelta.pod ※基本的に細かい修正ばかりです

Slide 5

Slide 5 text

ヒアドキュメントがインデント可能に (5.26) { 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 }

Slide 6

Slide 6 text

異なる種類のハンドルの共有は エラーに (5.28) # 5.26まで open my $hd, '<', 'foo.txt'; opendir $hd, 'bar/'; say <$hd>; # foo.txtの中身を出力 say readdir $hd; # barディレクトリのファイル一覧 # 5.28 Cannot open $hd as a dirhandle: it is already open as a filehandle

Slide 7

Slide 7 text

文字列用のビット演算子 (5.28) • 5.22で実験的に導入されたものが昇格 # 5.26まで use utf8; say "生" & "死"; # 愛 # 5.28 use utf8; say "生" & "死"; # 0 say "生" &. "死"; # 愛

Slide 8

Slide 8 text

影響の大きな変更

Slide 9

Slide 9 text

@INCからカレントディレクトリが 除去 (5.26) • 数年越しのセキュリティフィックス • 古いCGIスクリプトなどは動かなくなるかも • まずはツールチェーンのアップデートを • requireなどは起点のパスを追加 • 必要なら@INCの末尾に"."を戻す #!/usr/bin/perl require "jcode.pl"; do "main.pl"; #!/usr/bin/perl require "./jcode.pl"; do "./main.pl";

Slide 10

Slide 10 text

encodingプラグマの変更 (5.26) × use encoding 'cp932'; ○ use encoding 'cp932', Filter => 1; • 日本語Windows環境で5C問題にわずらわ されずに小物スクリプトを書くときには便利 だったのですが…

Slide 11

Slide 11 text

Test2フレームワークの 導入 (5.26) • Test::Builderの中身が新しいTest2 フレームワークに • 一部のテストモジュールが未対応

Slide 12

Slide 12 text

仕切り直しになったもの

Slide 13

Slide 13 text

正規表現中のあいまいな { の扱い (5.26) • 5.16で廃止、5.22で警告、5.26でエラーに • CPANのみならずgolangのテストなどにも影響 • autoconfで問題発覚。該当の表現のみ警告に $foo =~ /¥d{1,10}/; # ok $foo =~ /something{}/; # 5.26ではエラー $foo =~ /something[{]/; # ok $foo =~ /something¥{/; # ok $foo =~ /{}/; # これもok $foo =~ /$hash{bar}/; # ok $foo =~ /$hashlike{}/; # 5.26ではエラー $foo =~ /¥$foo/; # ok $foo =~ /¥${foo}/; # 5.26ではエラー $foo =~ /¥${[^¥}]*}/'; # autoconf問題

Slide 14

Slide 14 text

正規表現中のあいまいな { の扱い (5.28) • 一部はふたたび警告に $foo =~ /something{}/; $foo =~ /¥${foo}/; # 5.28から警告、5.32でエラーになる予定 $foo =~ /({1})/; $foo =~ /¥({1}¥)/; # これはOK

Slide 15

Slide 15 text

スマートマッチ問題 (5.28) • 5.10で正式な機能として導入(Perl 6由来) • さまざまな問題を経て5.18で実験的機能に格下げ • 5.27.7 (2017-12-20リリース)で大きな仕様変更 • CPANへの影響大のため5.27.8で差し戻しに P5P update: Smarter Match https://www.perl.com/article/p5p-update-smarter-match/

Slide 16

Slide 16 text

サブルーチンシグネチャの 再修正 (5.28) • 5.20で実験的に導入 • 5.22でシグネチャとアトリビュートの並び順が変更に • 高速化も進み、シグネチャなしの場合とほぼ同等に • :lvalueの場合に問題が発覚したため、再度仕様変更 (lvalue: $obj->setter = "value"; のような構文) sub f :lvalue ($a, $b) { ... }; # 5.20 sub f ($a, $b) :lvalue { ... }; # 5.22~5.26 sub f :lvalue ($a, $b) { ... }; # 5.28~

Slide 17

Slide 17 text

いろいろと議論は ありました • Perl 5 Core Hackathon (2016年~) • 廃止予定のロードマップ作成 (5.26) • 実装予定のロードマップ? • 継続的テストの対象拡大? • 理想と現実

Slide 18

Slide 18 text

CPAN Meta DBの統計によると… • 公式サポートバージョンは 3割程度 2018年08月25日時点で サンプル数が最大なのは 5.16.3 (15.7%) • CentOS 5の退役で5.8.8 が1%以下に • あくまで参考程度に http://cpanmetadb.plackperl.org/versions/?date=20180825

Slide 19

Slide 19 text

話題のCPAN モジュール

Slide 20

Slide 20 text

PPR (2017) • Damian Conway氏作 • Pattern-based Perl Recognizer • 正規表現でPerlコードをパース • 5.10で追加された(DEFINE)を活用 use PPR; # $source_codeがPerlとして正しく解析できるか確認 if ($source_code =~ m{¥A (?&PerlDocument) ¥Z $PPR::GRAMMAR}x) { ... } else { say "¥$source_codeに構文エラーがあります"; }

Slide 21

Slide 21 text

PPR (2017) our $GRAMMAR = qr{ (?(DEFINE) (? ¥x{FEFF}?+ # Optional BOM marker (?&PerlStatementSequence) ) # End of rule (? (?&PerlPodSequence)?+ (?: (?&PerlStatement) (?&PerlPodSequence)?+ )*+ ) # End of rule ... (こんな感じの定義が約1750行) }xms;

Slide 22

Slide 22 text

Babble (2018) • Matt S Trout氏作 • JavaScriptのBabelインスパイア • PPRを活用して最近のコードを古い Perl向けのコードに置換 • サブルーチンシグネチャの新旧切り 替えにも対応 • .pmcという拡張子のファイルを活用 すると新旧両用にも

Slide 23

Slide 23 text

構文拡張系のモジュール • 5.12/5.14で追加されたキーワード プラグイン/構文解析機構を利用 • スコープの扱いなどがより直感的に • Syntax::Keyword::Try • Future::AsyncAwait • Function::Parameters など

Slide 24

Slide 24 text

DBD::MariaDB (2018) • 従来のDBD::mysqlからのフォーク • 最新のMySQL/MariaDBをサポート • セキュリティ問題など修正多数 • Unicodeまわりの扱いが従来の DBD::mysqlとは異なるため、既存ア プリの移行は慎重に

Slide 25

Slide 25 text

Perl 6について • 月々のリリースは続いています • 次のメジャーリリースとなる6.dが準備中 (予定では2018年11月のDiwali祭後に) • 書籍も続々と • 最近ではCroというウェブアプリケーション フレームワークが話題 • IntelliJを利用したCommaというPerl 6用 IDEも登場(Early Beta)

Slide 26

Slide 26 text

Questions?

Slide 27

Slide 27 text

Thank you