昔の掲示板を設置するMojolicousからCGIを呼ぶ他者のPerlを書き替える他者のPerlを書き替える~2~全ページに告知テキストファイルの改行を正確に読む2018-02-08きっかけこのツイートを見て。5.8系ので改行LFのテキストをエンコードレイヤー':bytes'で読んでたのだけれど、大量の空行のうち、一部が読み込まれていなかったのはバグ?CRLFにして':crlf'にしたら正常に動いたけれど、いつも入力データ加工できるとも限らないし、怖いんだけれど。2018年1月31日テスト用テキストファイル7行目と8行目の改行に細工してあります。それと「たこルカ俺嫁」の下に改行1行あります。今日は良い天気この下に0x0d,0x0aの空行2行たこルカは俺の嫁コード書いてみたけれど多分コレジャナイ(笑)。肝はlinuxの改行(0x0a)を入力して:crlfがきちんと把握してる点。このコードではファイル出力までcrlfになる。例によってWindows(ActivePerl)とLinux(CentOS)でバージョンは共に5.24です。ここから追加しました。chompの挙動が未確認でしたので追試します。テスト用テキストファイルは同一です。@linebuff;}追試の実行結果(Windows)出力文字コードと環境(コマンドプロンプト)が異なるので警告が多量に表示されるのでリダイレクトした内容を見ます。2>NUL「改行はcrlf」が前提のWindowsでは「:crlf」の有無に違いがありませんでした。chomp''-----追試の実行結果(Linux)出力文字コードと環境(シェル)の文字コードは同じutf8です。Windowsのような警告は出ません。>sample_17.txt「改行はlf」が前提のLinuxで「:crlf」なしに「crlf」の行を読み込むと「lf」で1行になりますが「cr」は改行と見られていません。chompで消えるのは末尾の「lf」だけで「cr」が残ります。「:crlf」ありの場合は1行読み込んで「crlf」が「lf」に変換されていてchompで「lf」が消えます。chomp''-----追試後のまとめWindowsとLinuxで同じように動作させるための方法。mojolicious。