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で読み込み '本日は晴天なりたこルカは俺の嫁ルカ姐さんも俺の嫁'
