Perlの最新バージョンPerl 5.26リリース。インデント可能ヒアドキュメント、Unicode 9.0、長いキーのハッシュの性能改善
2017年5月30日にPerl 5.26がリリースされました! Perlの登場が1987年ですから、ついに30年目を迎えます!
機能の追加
Perl 5.26におけるいくつかの機能の追加です。便利そうなものをピックアップしてみます。
インデント可能ヒアドキュメント
インデント可能ヒアドキュメントの構文が追加されました。これは便利そうです。
my $message = <<~EOS; Hello World EOS
末尾の文字(ここではEOS)の位置が、左の位置になって、出力結果は以下のようになります。
Hello World
エディタで、ソースコードの色付けがうまくできるようになるとさらによい感じです。
レキシカルサブルーチンの機能が正式なものに
レキシカルサブルーチンの機能が正式なものになりました。
{ my sub foo { ... } # 現在のスコープだけから呼び出せる。 title(); }
パフォーマンスの改善
Perl 5.26におけるパフォーマンスの改善についてピックアップします。
64bit環境でハッシュのパフォーマンス改善
よりバランスを取るためにハイブリッドハッシュになりました。
16バイト以下の短いキーでは「At A Time Hard」長いキーは「Siphash 1-3」アルゴリズムを使用します。
とても長いキーではパフォーマンスが大幅に向上します、短いキーでは少しの改善があります。
ファイルからの行読み込みの高速化
ファイルを行から読み込むreadline、および「<>」演算子のパフォーマンスが向上しました。改行文字の検索方法の実装がより速いものになりました。
リファレンスの代入の高速化
他の変数にリファレンスを代入する操作が速くなりました。
my $obj1 = SomeModule->new; my $obj2 = $obj1;
後方互換性のない変更
後方互換性のない変更です。
@INCの末尾にデフォルトで追加されていた「.」が取り除かれました
Perl 5.26においては、これは、一番大きな影響のある互換性のない変更です。モジュールの読み込みパスにカレントディレクトリがあると、セキュリティ上のリスクがあるため、これを取り除く変更が行われています。
詳しくは以下の記事に書いたのでご覧ください。
感想
Perlをわかりやすくする変更や、パフォーマンスの改善は、歓迎です。新しいUnicodeにすぐに対応になるのもとてもよい。
「.」が@INCから取り除かれたのは、かなりのソースコードに影響を与えますが、セキュリティ上の問題を放置し続けることよりは、よい決定だと思います。
Perl 5.26へのアップグレードは、かなりの注意が必要です。事前に対処しておくのがベストです。モジュールやファイルを読み込むパスは、FindBinモジュールで、絶対パスで設定するようにするのが、よいでしょう。
Perl 5.20までは、安定で、Perl 5.22とPerl 5.24では、内部APIを使っているCoroが動かなくなるという問題が発生しました。現在はPerl 5.22では最新版のCoroは動くようですが、Perl 5.24以降では動きません。Perl 5.26では、「.」が@INCから取り除かれます。
アップグレードの注意は、Coroを利用していないことを確認することと、「.」が@INCに含まれなくなることに対する対応をすることです。
古いPerlを使っている場合は、Perl 5.20まで、まずアップグレードして、さらにそこから、最新版にアップグレードするという流れにすると、問題が起こりにくくてよいんじゃないかと思います。