Perl で UTF-8 入力をバッファーなしで読み取ろうとしています (つまり、データが利用可能になるとすぐに返されます)。
die if !binmode STDIN, ':unix:utf8';
my $i;
my $buf;
while ($i = read(STDIN, $buf, 8192)) {
print "$i\n";
}
ただし、入力に UTF-8 文字分割が含まれている場合は機能しません。
$ perl -e '$|=1;print"\xc3";sleep 1;print"\xa1";sleep 1;print"AB"' | perl t.pl
これは 1 を出力し、次に 2 を出力するはずですが、3 を出力するため、最初の文字が使用可能になった後でもバッファリングによって保留されます。
Perl でこれに対する簡単な解決策はありますか? それとも、Unix 用の別のスクリプト言語でしょうか?