IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

Perlのお約束

      2014/05/10

@nqounetです。

Perlのスクリプトを書くときの「お約束」として、「use strict」などの色々を整理していたのですが、お約束として好ましくないことをしていた事がわかりました。

:encoding(UTF-8) の代わりに単に :utf8 を使うことで、もしデータが 内部で既に UTF8 で表現されていれば、エンコードの手順を省略します。 これは、書き込むときにはよい振る舞いであると広く受け入れられていますが、 読み込むときには危険があります; なぜなら不正なバイト列を受け取ると 内部矛盾を引き起こすからです。 入力に :utf8 を使うとセキュリティ侵害を引き起こす可能性があるので、 どうか代わりに :encoding(UTF-8) を使ってください。

ずっと「:utf8」を好んで使っていたので、そちらをお約束にしていたのですが、入力に関しては「:encoding(UTF-8)」の方が良いようです。
…とは言うものの、これはこれで微妙な気がします。
ここで言っている「不正なバイト列」というのは、具体的に何なのかがわかりません。
言えることは、Perlの内部形式(あえて言うなら「utf8」)と文字コードの「UTF-8」は違うので、入力時には文字コードの「UTF-8」をdecodeするのがふさわしい書き方ということくらいです。
本来ならば入り口でdecodeしなければならないのを、binmodeを使って簡略化している事が、そもそもお約束としては不適切なのかもしれません。
Perl入学式でも文字コードの話題になると後回しにしているのですが、このあたりをどのように説明するのが良いのか悩みます。

respo

respo link

ZenBackWidget

 - 情報技術について