我正在尝试以无缓冲的方式读取 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 脚本语言?