2

通过我上一个问题的讨论,我了解到 Perl 默认提供行缓冲区输出。

$| = 0; # for buffered output (by default)

如果您想获得无缓冲的输出,则将特殊变量设置$|为 1 即

$| = 1;  # for unbuffered output

现在我想知道在哪些情况下应该更喜欢无缓冲的输出?

4

3 回答 3

9

您需要交互式任务的无缓冲输出。我的意思是,当您期望某人或某物响应输出时,您不希望输出卡在某个缓冲区中。

例如,您不希望发送到 STDOUT 的用户提示被缓冲。(这就是为什么 STDOUT 在连接到终端时永远不会完全缓冲的原因。它只是行缓冲,并且通过尝试从 STDIN 读取来刷新缓冲区。)

例如,您希望通过管道和套接字发送的请求不会卡在某个缓冲区中,因为连接的另一端永远看不到它。


我能想到的唯一另一个原因是,当您不希望在发生不可恢复的错误(例如恐慌或信号死亡)时将重要数据卡在缓冲区中。

例如,您可能希望保持日志文件不受缓冲,以便能够诊断严重问题。(这就是默认情况下不缓冲 STDERR 的原因。)

于 2011-07-03T04:40:17.933 回答
3

当通过套接字或管道写入另一个程序时,它会很有用。当您将调试信息写入 STDOUT 以实时查看程序状态时,它也很有用。

于 2011-07-03T04:39:32.000 回答