改行コードとchomp
まず、WINDOWS上で改行コードが各々、\x0D\x0A、\x0D、\x0A、の3つのテキストファイルを用意します。
そのテキストファイルをPerl(v5.8.8)で読み込み、chomp(改行コード削除)の振る舞いをテストしてみました。
結論から言うと、読み込みモードがテキストでもバイナリでも、chompは、行の最後に \x0A があるときだけ、それを削除します。
\x0D に関しては、なにもしません。
したがって、1度のchompだけで行末の \x0D\x0A を削除することは、ないみたいです。
- 改行コードが \x0D\x0A のテキストファイルをテキストモードで読み込むと改行コードは \x0A になりました。
- 改行コードが \x0D\x0A のテキストファイルをバイナリモードで読み込むと改行コードは \x0D\x0A になりました。
- 改行コードが \x0D のテキストファイルをテキストモードで読み込むと改行コードは \x0D になりました。
- 改行コードが \x0D のテキストファイルをバイナリモードで読み込むと改行コードは \x0D になりました。
- 改行コードが \x0A のテキストファイルをテキストモードで読み込むと改行コードは \x0A になりました。
- 改行コードが \x0A のテキストファイルをバイナリモードで読み込むと改行コードは \x0A になりました。
chompが有効だったのは、1,2,5,6のケースで、2,3,4のケースでは、\x0Dが残ります。
ちなみに、データダンプは以下のようにしました。$wkには一行データが入っています。
print "--->", unpack("H*", $wk), "<---", "\n";