前回の(1)はこちらから。
encodingプラグマの仕様変更とその対策
Perl 5.26には、ほかにも古いバージョンのPerlからアップグレードするとエラーになる変更がいくつかあります。encoding
プラグマの仕様変更もその一つです。
従来はencoding
プラグマにエンコーディングを渡しておけば、UTF-8以外の文字コードで書かれたモジュールやライブラリでも適切にPerlの内部表現に変換されていました。
この挙動はPerl 5.22で廃止対象となり警告が出ていたのですが、Perl 5.26ではエラーに変わりました。
ただし、5.26でも次のようにFilter
オプションを使えば、Perlに内蔵されているソースフィルタ機能を使って同等のことを実現できます。
もっとも、この場合でも警告は出続けるので、可能であればコードはUTF-8で書き、utf8
プラグマを利用したうえで、必要に応じて入出力ファイルの文字コードを変換するようにしたほうがよいでしょう。
正規表現中の{の扱い
正規表現中に、量指定子なのか文字グループなのか、変数の一部なのかリテラルなのかがあいまいな{
が存在していると、Perl 5.22からは警告が出ていましたが、Perl 5.26ではエラーになりました[7]。プログラムのソースコード(の一部)を正規表現で解析したり、JSONの一部を正規表現で抜き出すような処理をしていると、この問題に引っかかる可能性があります。エラーや警告が出た場合は量指定子や文字グループ、変数以外の{
をすべてエスケープしてください。
<続きの(3)はこちら。>
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT