ルモーリン

テキストファイルの改行を正確に読む

投稿:2018-02-07、更新:2018-02-08

このツイートを見て。
7行目と8行目の改行に細工してあります。 それと「たこルカ俺嫁」の下に改行1行あります。
本日は晴天なり
この下に0x0aの空行2行


今日は良い天気
この下に0x0d,0x0aの空行2行


たこルカは俺の嫁

書いてみたけれど多分コレジャナイ(笑)。 肝はlinuxの改行(0x0a)を入力して:crlfがきちんと把握してる点。 ただしこのコードではファイル出力までcrlfになる。
#!/usr/bin/env perl -w

use utf8;
use warnings;
use strict;
use open IO => ":crlf :utf8";

use Encode::Locale;

binmode STDOUT, ":encoding(console_out)";

$| = 1;

while (<>) {
	chomp;
	print "'$_'\n";
}

exit;
例によってWindows(ActivePerl)とLinux(CentOS)でバージョンは共に5.24です。
'本日は晴天なり'
'この下に0x0aの空行2行'
''
''
'今日は良い天気'
'この下に0x0d,0x0aの空行2行'
''
''
'たこルカは俺の嫁'
''
ばんざーい♪
2018-02-08 ここから追加しました。 ファイルを読む際の「:crlf」「:bytes」「:utf8」の指定と環境(Windows/Linux)によるファイルの1行の扱いと、 chompの挙動が未確認でしたので追試します。 なおテスト用テキストファイルは同一です。
#!/usr/bin/env perl -w

use utf8;
use warnings;
use strict;

use Data::Hexify;
use Encode::Locale;

binmode STDOUT, ":encoding(console_out)";

$| = 1;

my $sample = "sample_14.txt";
file_input("", $sample);
file_input(":crlf", $sample);
file_input(":bytes", $sample);
file_input(":bytes :crlf", $sample);
file_input(":utf8", $sample);
file_input(":utf8 :crlf", $sample);

exit;

sub file_input {
	my ($filemode, $filename) = @_;
	print "ファイルモード'$filemode'―――――――――――――――――――――――――――――――――――――――――――――――\n";

	open my $fh, "<$filemode", $filename or die "ファイルオープン失敗:$filename";
	while (<$fh>) {
		print "'$_'\n";
		print hexdump($_) . "\n";

		chomp;
		print "chomp\n";

		print "'$_'\n";
		print hexdump($_) . "\n";
		print "-----\n";
	}
	close $fh;
}

sub hexdump {
	my ($d) = @_;

	my @linebuff;
	for (split "\n", Hexify $d, { showdata => sub { return ""; }, }) {
		s/.*: //;
		s/ +/ /g;
		push @linebuff, $_;
	}
	return join "", @linebuff;

}
出力文字コードと環境(コマンドプロンプト)が異なるので警告が多量に表示されるのでリダイレクトした内容を見ます。
perl sample_17.pl >sample_17.txt 2>NUL
「改行はcrlf」が前提のWindowsでは「:crlf」の有無に違いがありませんでした。
ファイルモード''―――――――――――――――――――――――――――――――――――――――――――――――
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':bytes'―――――――――――――――――――――――――――――――――――――――――――――――
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':bytes :crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':utf8'―――――――――――――――――――――――――――――――――――――――――――――――
'本日は晴天なり
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'本日は晴天なり'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'この下に0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'この下に0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'今日は良い天気
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'今日は良い天気'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'この下に0x0d,0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'この下に0x0d,0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'たこルカは俺の嫁
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'たこルカは俺の嫁'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':utf8 :crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'本日は晴天なり
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'本日は晴天なり'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'この下に0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'この下に0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'今日は良い天気
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'今日は良い天気'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'この下に0x0d,0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'この下に0x0d,0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'たこルカは俺の嫁
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'たこルカは俺の嫁'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
出力文字コードと環境(シェル)の文字コードは同じutf8です。Windowsのような警告は出ません。
perl sample_17.pl >sample_17.txt
「改行はlf」が前提のLinuxで「:crlf」なしに「crlf」の行を読み込むと「lf」で1行になりますが「cr」は改行と見られていません。 chompで消えるのは末尾の「lf」だけで「cr」が残ります。 「:crlf」ありの場合は1行読み込んで「crlf」が「lf」に変換されていてchompで「lf」が消えます。
ファイルモード''―――――――――――――――――――――――――――――――――――――――――――――――
'a?¬a?\a? ̄a?´a?ca?aa??
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'a?¬a?\a? ̄a?´a?ca?aa??'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a≫?a?\a? ̄e? ̄a??a?ca°?
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'a≫?a?\a? ̄e? ̄a??a?ca°?'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0d 0a 
chomp
'
'
0d 
-----
'
'
0d 0a 
chomp
'
'
0d 
-----
'a??a??a?≪a?≪a? ̄a?oa?Ra≪?
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'a??a??a?≪a?≪a? ̄a?oa?Ra≪?'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'a?¬a?\a? ̄a?´a?ca?aa??
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'a?¬a?\a? ̄a?´a?ca?aa??'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a≫?a?\a? ̄e? ̄a??a?ca°?
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'a≫?a?\a? ̄e? ̄a??a?ca°?'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a??a??a?≪a?≪a? ̄a?oa?Ra≪?
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'a??a??a?≪a?≪a? ̄a?oa?Ra≪?'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':bytes'―――――――――――――――――――――――――――――――――――――――――――――――
'a?¬a?\a? ̄a?´a?ca?aa??
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'a?¬a?\a? ̄a?´a?ca?aa??'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a≫?a?\a? ̄e? ̄a??a?ca°?
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'a≫?a?\a? ̄e? ̄a??a?ca°?'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0d 0a 
chomp
'
'
0d 
-----
'
'
0d 0a 
chomp
'
'
0d 
-----
'a??a??a?≪a?≪a? ̄a?oa?Ra≪?
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'a??a??a?≪a?≪a? ̄a?oa?Ra≪?'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':bytes :crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'a?¬a?\a? ̄a?´a?ca?aa??
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'a?¬a?\a? ̄a?´a?ca?aa??'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a≫?a?\a? ̄e? ̄a??a?ca°?
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'a≫?a?\a? ̄e? ̄a??a?ca°?'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'a??a??a?≪a?≪a? ̄a?oa?Ra≪?
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'a??a??a?≪a?≪a? ̄a?oa?Ra≪?'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':utf8'―――――――――――――――――――――――――――――――――――――――――――――――
'本日は晴天なり
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'本日は晴天なり'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'この下に0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'この下に0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'今日は良い天気
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'今日は良い天気'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'この下に0x0d,0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'この下に0x0d,0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0d 0a 
chomp
'
'
0d 
-----
'
'
0d 0a 
chomp
'
'
0d 
-----
'たこルカは俺の嫁
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'たこルカは俺の嫁'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
ファイルモード':utf8 :crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'本日は晴天なり
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a 
chomp
'本日は晴天なり'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 
-----
'この下に0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'この下に0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'今日は良い天気
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a 
chomp
'今日は良い天気'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 
-----
'この下に0x0d,0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a 
chomp
'この下に0x0d,0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 
-----
'
'
0a 
chomp
''

-----
'
'
0a 
chomp
''

-----
'たこルカは俺の嫁
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a 
chomp
'たこルカは俺の嫁'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 
-----
'
'
0a 
chomp
''

-----
WindowsとLinuxで同じように動作させるための方法。
  • ファイルを開く際に「:crlf」を付ける
  • ファイルの文字コードに合わせて(例えばutf8なら)「:utf8」を付ける
  • たとえファイルが「lf」しかない行でも「:crlf」は改行を把握できる
  • 1行読み込んでからchompで末尾の改行を消す