小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

改行コードとchomp

まず、WINDOWS上で改行コードが各々、\x0D\x0A、\x0D、\x0A、の3つのテキストファイルを用意します。
そのテキストファイルをPerl(v5.8.8)で読み込み、chomp(改行コード削除)の振る舞いをテストしてみました。


結論から言うと、読み込みモードがテキストでもバイナリでも、chompは、行の最後に \x0A があるときだけ、それを削除します。
\x0D に関しては、なにもしません。
したがって、1度のchompだけで行末の \x0D\x0A を削除することは、ないみたいです。

  1. 改行コードが \x0D\x0A のテキストファイルをテキストモードで読み込むと改行コードは \x0A になりました。
  2. 改行コードが \x0D\x0A のテキストファイルをバイナリモードで読み込むと改行コードは \x0D\x0A になりました。
  3. 改行コードが \x0D のテキストファイルをテキストモードで読み込むと改行コードは \x0D になりました。
  4. 改行コードが \x0D のテキストファイルをバイナリモードで読み込むと改行コードは \x0D になりました。
  5. 改行コードが \x0A のテキストファイルをテキストモードで読み込むと改行コードは \x0A になりました。
  6. 改行コードが \x0A のテキストファイルをバイナリモードで読み込むと改行コードは \x0A になりました。


chompが有効だったのは、1,2,5,6のケースで、2,3,4のケースでは、\x0Dが残ります。
ちなみに、データダンプは以下のようにしました。$wkには一行データが入っています。

print "--->", unpack("H*", $wk), "<---", "\n";