通过我的讨论previous question我开始知道 Perl 默认提供行缓冲区输出。
$| = 0; # for buffered output (by default)
如果你想获得无缓冲的输出,那么将特殊变量 $|
设置为 1 即
$| = 1; # for unbuffered output
现在我想知道在什么情况下应该更喜欢无缓冲输出?
最佳答案
您想要交互式任务的无缓冲输出。我的意思是,当您希望某人或其他事物响应输出时,您不希望输出卡在某个缓冲区中。
例如,您不希望缓冲发送到 STDOUT 的用户提示。 (这就是为什么 STDOUT 在连接到终端时永远不会完全缓冲。它只是行缓冲,并且缓冲区会因尝试从 STDIN 读取而被刷新。)
例如,您希望通过管道和套接字发送的请求不会卡在某个缓冲区中,因为连接的另一端永远看不到它。
我能想到的唯一其他原因是,当发生不可恢复的错误(例如信号崩溃或死亡)时,您不希望重要数据滞留在缓冲区中。
例如,您可能希望保留一个未缓冲的日志文件,以便能够诊断严重的问题。 (这就是默认情况下不缓冲 STDERR 的原因。)
关于perl - 人们应该更喜欢无缓冲输出的可能情况是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561074/