在Perl中STDOUT-> autoflush(1)会做什么?

Ste*_*hen 3 perl

我在Perl中找到了有关自动刷新的各种信息,但是找不到任何有关格式完全相同的行的信息:

STDOUT->autoflush(1);
Run Code Online (Sandbox Code Playgroud)

这包含在我正在分析的程序中,我想更好地了解它的作用。程序开始时也有以下内容:

use IO::Handle;
Run Code Online (Sandbox Code Playgroud)

...我认为可能是相关的,但它在其文档中也未提及此方法。

zdi*_*dim 5

该方法列在IO ::句柄,你注意到了

...
$io->autoflush ( [BOOL] )                         $|
...
Run Code Online (Sandbox Code Playgroud)

由此$|设置警戒/解除警戒,并将其发送到您$|在perlvar的解释

如果设置为非零,则在当前选择的输出通道上每次写入或打印后立即强制刷新。

从v5.14开始,您不需要这样做use IO::Handle,因为在需要时IO :: Filerequired。

此方法的特殊之处在于,即使没有提供任何值,它也会打开自动刷新功能,

$io->autoflush;  # turned on ($| gets set)
Run Code Online (Sandbox Code Playgroud)

而其他相关参数(请参阅文档)在不带参数调用时不会更改当前值。

  • @Stephen跟随链接“ _As of v5.14_”,它确实做了解释。我添加了一条注释以突出显示 (2认同)
  • @Stephen匆匆忙忙,简而言之:(1)STDOUT(和Co)是IO :: File对象,请与oneliner一起查看:perl -wE'say * {$ main :: {STDOUT}} {IO}'`(2)Perl输出根据其输出位置进行不同的缓冲;通常对于终端来说,它是行缓冲的,而对于管道(和文件)来说,它是整块的(我认为这些天通常是64kB) (2认同)