IPC::Open3州的文档:
The CHLD_IN will have autoflush turned on
但source code中没有提及IO::Handle::autoflush
。该模块使用什么机制为CHLD_IN
打开autoflush?
答案 0 :(得分:2)
使用以下行禁用缓冲
override var shouldAutorotate : Bool {
// Lock autorotate
return false
}
可以改写为
select((select($handles[0]{parent}), $| = 1)[0]); # unbuffer pipe
在Perl中禁用输出缓冲的传统方法是通过my $old_fh = select($handles[0]{parent});
$| = 1;
select($old_fh);
变量。来自man perlvar
:
- HANDLE-> autoflush(EXPR)
- $ OUTPUT_AUTOFLUSH
- $ |
如果设置为非零,则在当前所选输出通道上的每次写入或打印后立即强制刷新。默认值为0(无论系统是否真正缓冲了该通道; $ |仅告诉您在每次写入后是否已明确要求Perl进行刷新)。如果输出到终端,则STDOUT通常是线路缓冲的,否则阻塞。设置此变量主要在输出到管道或套接字时很有用,例如在rsh下运行Perl程序并希望在输出时看到输出。这对输入缓冲没有影响。请参阅getc。请参阅有关如何选择输出通道的选择。另见IO :: Handle。
助记符:当你想让你的烟斗滚烫时。
设置$|
作用于"当前选择的输出通道"使用单参数形式select
设置。