Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2018年夏のPerl5

776 views

Published on

Shibuya.pm #18

Published in: Technology
  • Be the first to comment

  • Be the first to like this

2018年夏のPerl5

  1. 1. 2018 年夏の Perl5 Kenichi Ishigaki @charsbar Shibuya.pm #18 Jul 5, 2018
  2. 2. 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 <- イマ ココ
  3. 3. Perl 5.28 が出まし た • 6 月 23 日 ( 日本時間で 6 月 24 日午 前中 ) • 5 月中に出るという話もありました が、いろいろあって 1 ヶ月遅れに • おもな変更点は perldelta 参照 https://metacpan.org/pod/distribution/perl/pod/perldelta.pod http://perldoc.jp/docs/perl/5.28.0/perl5280delta.pod*Strawberry Perl や ActivePerl はまだ
  4. 4. 異なる種類のハンドルの 共有はエラーに # 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
  5. 5. ヒアドキュメントの終端 は省略不可に print <<''; # OK Empty string terminator is valid. print <<""; # OK Empty $string terminator is also valid. # 5.28 print <<; # NG This has long been deprecated since 5.000. Use of bare << to mean <<"" is forbidden
  6. 6. 関数呼び出しで継承元の AUTOLOAD が呼ばれるとエラーに package A; our @AUTOLOAD; sub AUTOLOAD { ... } package main; A::foo(); # OK package A; @ISA = qw/B/; package B; our @AUTOLOAD; sub AUTOLOAD { ... } package main; A::foo(); # Use of inherited AUTOLOAD for non-method A::foo() is no longer allowed
  7. 7. セキュリティフィック ス• 正規表現や Windows の環境変数など • [CVE-2017-12837] ~ 5.24.3/5.26.1 • [CVE-2017-12883] ~ 5.24.3/5.26.1 • [CVE-2017-12814] ~ 5.24.3/5.26.1 • 4 月にリリースされた Perl 5.26.2/5.24.4 でもいくつか問題が修正 されています • [CVE-2018-6797] 5.18 ~ 5.26 • [CVE-2018-6798] 5.22 ~ 5.26
  8. 8. 文字列用のビット演算子 • 5.22 で実験的に導入されたものが正式 化 • これによってビット演算の挙動が変わ る場合があります use 5.028; # または use feature 'bitwise'; say "a" &. "b"; # 「 ` 」 文字列としてビッ ト演算 say "a" & "b"; # 「 0 」 数値としてビット 演算
  9. 9. OP_MULTICONCAT 文字列結合が多くの場合高速化 ( 下記のようなコードだと四倍 速 )my $s; my $a = "abx{100}cde"; my $b = "fghij"; my $c = "x{101}klmn"; for my $i (1..10_000_000) { $s = "x{100}wxyz"; $s .= "foo=$a bar=$b baz=$c"; }
  10. 10. Unicode 10 サポー ト ビットコインの絵文字などが 追加
  11. 11. delete %hash{@keys} my %hash = (foo => 1, bar => 2, baz => 3); my @deleted = delete @hash{qw/foo bar/}; # (1, 2) # my @deleted = map {delete $hash{$_}} qw/foo bar/; # delete $hash{$_} for qw/foo bar/; リストを返す delete は昔からありま した ただし、いらないキーがいつでもわかっているとは限りません
  12. 12. delete %hash{@keys} 5.20 からは必要なキー / 値のみ抽出可能 にmy %new = %hash{qw/foo bar/}; # (foo => 1, bar => 2) # my %new = map {$_ => $hash{$_}} qw/foo bar/; ×my %deleted = delete %hash{qw/foo bar/}; # delete argument is key/value hash slice, use hash slice
  13. 13. 5.28 では delete も可能に my %new = delete %hash{qw/foo bar/}; die " 知らないキー / 値が残ってる !" if %hash; # my %new = # map {$_ => delete $hash{$_}} qw/foo bar/; delete %hash{@keys}
  14. 14. perl -i がより安全 に ... • 従来は処理の開始時にファイルを置換 していたのでエラーが出るとファイル が壊れることも • 置き換えのタイミングが処理完了後に なったので、元のファイルは壊れにく く • 処理中にディレクトリが変わったりす るとおかしなことになる場合も • ファイルディスクリプタ枯渇問題 https://rt.perl.org/Public/Bug/Display.html?id=133314
  15. 15. 前世紀的なコアモジュー ルの書き換え • use vars の置き換え • DynaLoader から XSLoader へ • Devel::PPPort の対応下限は 5.6.1 に
  16. 16. 古いパッケージセパレー タに関する警告 my $name = 'Foo'; say "In $name's house...";
  17. 17. 古いパッケージセパレー タに関する警告 my $name = 'Foo'; say "In $name's house..."; Use of uninitialized value $name::s in concatenation (.) or string
  18. 18. 古いパッケージセパレー タに関する警告 my $name = 'Foo'; say "In $name's house..."; # 5.28 では新しい警告が追加 Old package separator used in string (Did you mean "$name's" instead?) Use of uninitialized value $name::s in concatenation (.) or string
  19. 19. …その他 • 異なる種類の文字の混在を正規 表現で検出可能に ( 実験的 ) • JSON::PP が数値判定に B を使 わないバージョンに • glob の高速化 • etc etc
  20. 20. 仕切り直しに なったもの
  21. 21. ${^ENCODING} に undef 以外の 値をセットするとエラーに 本当はまるっと消えるはずだったんです が、 undef の場合だけは仕切り直しに ${^ENCODING} = 1; # ${^ENCODING} is no longer supported ${^ENCODING} = undef;
  22. 22. 正規表現中の { の扱 い autoconf の件もあって、一部の { につ いてはエラーから警告に戻っています # 5.26 はエラー、 5.28 は警告、 5.30 でエラーに戻 る予定 $foo =~ /something{}/; $foo =~ /${foo}/; $foo =~ /${[^}]*}/; # 5.26 でも警告 # 5.28 から警告、 5.32 でエラーになる予定 $foo =~ /({1})/; $foo =~ /({1})/; # これは OK
  23. 23. スマートマッチ Perl 5.27.7 で一度大きな変更が入っ たものの、あまりに影響が大きすぎ たので Perl 5.27.8 で差し戻しに P5P update: Smarter Match https://www.perl.com/article/p5p-update-smarter-match/
  24. 24. サブルーチンシグネチャ :lvalue の場合に問題が発生すること が発覚したため、シグネチャとアト リビュートの並び順が再度変更に なっています# 5.20 sub foo :lvalue ($a, $b) { ... } # 5.22 ~ 5.26 sub foo ($a, $b) :lvalue { ... } # 5.28 ~ sub foo :lvalue ($a, $b) { ... }
  25. 25. post526sigfix mst 氏による修正用スクリ プト http://www.trout.me.uk/perl/post526sigfixUsage: post526sigfix [OPTIONS] [FILES] post526sigfix -u perl526file >perl528file post526sigfix -d perl528file >perl526file post526sigfix -d --pmc lib/My/Module.pm >lib/My/Module.pmc post526sigfix -u -i $(find lib -name '*.pm') post526sigfix -d -i --pmc $(find lib -name '*.pm') 基本は書き換えですが、 pmc オプションを利用すると 5.26/5.28 両対応も 可能
  26. 26. …その他 • Module::Install(::DSL) が一因で 差し戻しになった変更とか • p5p の ML にタイトルに BBC を 含むメールが流れてきたら要注 意
  27. 27. 今後の予定 • perldeprecation.pod には Perl 5.32 までの廃止 / 削除予定が記載 https://metacpan.org/pod/distribution/perl/pod/p erldeprecation.pod • TPC 2018 in Glasgow http://act.perlconference.org/tpc-2018-glasgow/
  28. 28. Thanks

×