Perl运算符:$ | ++; 美元符号管加上加号

Her*_*nge 16 perl expression

我正在研究已经发布的perl代码的新版本,并找到了该行:

$|++;
Run Code Online (Sandbox Code Playgroud)

AFAIK,$ | 与管道相关,如本链接所述,我理解这一点,但我无法弄清楚++(加上加号)在这里意味着什么.

先感谢您.

编辑: 在此链接中找到答案:

简而言之:它强制在下一个语句之前打印(刷新)到您的控制台,以防脚本太快.

有时,如果将print语句放在一个非常快速运行的循环中,则在程序终止之前,您将看不到print语句的输出.有时,你根本看不到输出.解决这个问题的方法是在每个print语句后"刷新"输出缓冲区; 这可以使用以下命令在perl中执行:

$|++;
Run Code Online (Sandbox Code Playgroud)

[更新]正如r指出的那样.施瓦茨,我错过了; 上面的命令会导致print在下一个输出之前刷新缓冲区.

pnd*_*ndc 18

$|默认为0; 这样做$|++会将其增加到1.将其设置为非零会在当前选定的文件句柄上启用autoflush,这是STDOUT默认情况下很少更改的.

因此效果是确保print语句等立即输出.如果您要输出到套接字等,这将非常有用.


Fre*_*Foo 12

$|$OUTPUT_AUTOFLUSH你发现的缩写.该++递增这个变量.

$| = 1 将是干净的方式(恕我直言).

  • 请你继续在别处讨论吗? (2认同)

Leo*_*erd 6

这是一个古老的习语,来自 IO::Handle 之前的日子。在现代代码中,这应该写为

use IO::Handle; STDOUT->autoflush(1);


Mic*_*ker 5

它增加自动刷新,这很可能相当于打开它。

  • 我想你可能在开玩笑说回零,但有趣的是 `$|` 是一个布尔值,试试 `$|=3; 打印 $|`。 (2认同)