「Perl 5.28」リリース、さまざまな新機能や変更を導入

 Perl開発チームは6月22日、「Perl 5.28」を公開した。Unicode 10のフルサポートを始め、多数の機能が加わっている。

 Perl 5.28は2017年5月に公開されたPerl 5.26に続く5系の最新版。5系そのもののリリースは1994年にさかのぼる。なおPerl開発チームは5系と互換性のないPerl 6を2015年末に公開している。

 本バージョンでは、2017年に登場したUnicode 10.0を完全サポートした。また、「-i」オプションを使ったファイル内容の置換処理の手順が変更され、従来は処理開始時に即座に入力ファイルが削除もしくはリネームされていたのが、新たにファイル出力が完了して閉じられるまで入力ファイルは変更されずに保護されるようになった。

 バージョン5.22で導入された「&.」や「|.」、「^.」。「~.」といった文字列向けビット演算子および「&」や「|」、「^」、「~」といった数値向けビット演算子が実験的段階から脱した。利用には「use feature “bitwise”」もしくは「use v5.28」プラグマを使った宣言が必要となる。また、「-E」オプションでもこれらの機能が有効になる。

 新たな実験的機能として、正規表現において(*pla:)や(*positive_lookahead:)のような表記が導入された。(?=)のような先読み/戻り読み表記が覚えにくいという理由で導入されたもの。ただし実験的機能であるため、利用時には警告が表示されることがあるという。

 セキュリティ関連では、一部の正規表現パターンでエラーメッセージにランダムにメモリのチャンクを含ませたり、クラッシュさせることができるセキュリティ上の脆弱性を修正した。このほか、ヒープバッファオーバーフローを引き起こす可能性のあるものなど、複数の脆弱性が修正されている。

 また、デフォルトのハッシュ関数が変更され、古いハッシュ関数を削除した。利用できるハッシュ関数はSiphash(2-4版と1-3版)、Zaphod32、StadtX、SBOX32(集計ハッシュ型式)の4種類となった。

 性能も強化した。Unicodeプロパティ(\p{…})を持つ正規表現の作成における初期オーバーヘッドがほとんどの場合で減少したほか、multiconcatオペコードの内部への導入により文字列の連結が高速になったという。ref()関数、keys()関数なども高速になり、for()ループや類似構文も効率化するという。

 そのほか互換性のない変更や、すでにdeprecated(廃止予定)となっていた機能の削除なども多数行われている

Perl
https://www.perl.org/