chomp内蔵に失敗
投稿:2019-04-17
この前、openに「改行をCRで出力」というオプションを追加できたので、味をしめて「入力で改行をchomp」というオプションを追加しようと思いました。
まあ、タイトル通りの結末なんですが(笑)。
ファイルMyChomp.pmです。
package MyChomp; use utf8; use strict; use warnings; use feature "say"; sub PUSHED { my ($class, $mode, $fh) = @_; my $dummy = ""; return bless \$dummy, $class; } sub FILL { my ($obj, $fh) = @_; my $line = <$fh>; chomp $line if defined $line; return $line; } 1;
#!/usr/bin/env perl -w use strict; use warnings; use utf8; use feature "say"; use Encode::Argv; use Encode::Locale; use FindBin; use lib $FindBin::Bin; use MyChomp; use open IO => ":utf8"; binmode STDIN, ":encoding(console_in)"; binmode STDOUT, ":encoding(console_out)"; $| = 1; use constant TEST_FILE => "sample_90.txt"; say "テストファイル生成"; if (open my $fh, ">", TEST_FILE) { print $fh "$_\n" for qw / 本日は晴天なり たこルカは俺の嫁 ルカ姐さんも俺の嫁 /; close $fh; } say "普通に読み込み"; if (open my $fh, "<", TEST_FILE) { say "'$_'" while <$fh>; close $fh; } say "MyChompで読み込み"; if (open my $fh, "< :via(MyChomp) :utf8", TEST_FILE) { say "'$_'" while <$fh>; close $fh; }
世の中厳しい、上手く行かないもんだ(泣)。
途中で改行コードを削除してしまうと、その後の入力処理で1行とみなすようですね。
テストファイル生成 普通に読み込み '本日は晴天なり ' 'たこルカは俺の嫁 ' 'ルカ姐さんも俺の嫁 ' MyChompで読み込み '本日は晴天なりたこルカは俺の嫁ルカ姐さんも俺の嫁'