Perl,$ | ++有什么作用?

时间:2014-04-25 16:42:57

标签: perl

我正在重新考虑一些perl代码,而且看起来似乎就是这样,Perl有一些奇怪的结构,这些结构很难查找。

在这种情况下,我遇到了以下内容......

$|++;

在"使用"之后,这本身就是一条线。声明。

这个命令有什么作用?

5 个答案:

答案 0 :(得分:5)

来自perldoc perlvar

  

<强> $|

     

如果设置为非零,则在当前所选输出通道上的每次写入或打印后立即强制刷新。默认值为0(无论系统是否真正缓冲了通道; $|仅告诉您在每次写入后是否已明确要求Perl进行刷新)。如果输出到终端,则STDOUT通常是行缓冲的,否则阻塞。设置此变量主要在输出到管道或套接字时很有用,例如在rsh下运行Perl程序并希望在输出时看到输出。这对输入缓冲没有影响。请参阅getc。请参阅有关如何选择输出通道的选择。另请参阅IO::Handle

因此,因为它始终以0开头,所以它会增加到1,在每次写入/打印后强制刷新。

您可以将以下内容替换为更清晰。

use English '-no_match_vars';
$OUTPUT_AUTOFLUSH = 1;

答案 1 :(得分:3)

查找变量最好使用perlvar(perldoc perlvar或http://perldoc.perl.org/perlvar.html

从那起:

  

HANDLE-&gt; autoflush(EXPR)

     

$ OUTPUT_AUTOFLUSH

     

$ |

     

如果设置为非零,   在每次写入或打印后立即强制冲洗   当前选择的输出通道。默认值为0(无论是否为   信道是否真的由系统缓冲; $ |只告诉你   你是否在每次写入后明确要求Perl刷新)。   如果输出到终端,则STDOUT通常是线路缓冲的   否则阻止缓冲。设置此变量很有用   主要是当您输出到管道或套接字时,例如何时   你正在rsh下运行一个Perl程序,并希望看到输出为   它正在发生。这对输入缓冲没有影响。见getc for   那。请参阅有关如何选择输出通道的选择。也可以看看   IO ::处理。

++是增量运算符,它向变量添加一个。

所以$ | ++设置autoflush为true(默认为0 + 1 = 1,布尔值为true),这会强制写入stdout不被缓冲。

答案 2 :(得分:1)

$|是Perl的特殊变量之一。

根据perlvar

  

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

答案 3 :(得分:1)

如果Google是您唯一的信息来源,我可以理解在Perl中查找特殊变量会如何引起惊愕。幸运的是perldoc!每台带有perl的机器也应该有perldoc。使用它而不使用命令行参数来获取Perl版本附带的所有Core文档的列表。

  • 要查找所有特殊变量:perldoc perlvar

  • 要查找特定的特殊变量:perldoc -v '$|'(在* nix上, 在Windows上使用双引号

  • 查找perl的函数列表:perldoc perlfunc

  • 要查找特定功能:perldoc -f sprintf

  • 查找运算符(包括优先级):perldoc perlop

有了这些信息,您就会知道当后增量 输出Autoflush 变量时会发生什么。

作为特殊奖励,perldoc.perl.org可以管理所有这些工作,但-v搜索除外...

答案 4 :(得分:1)

正如其他人所指出的那样,它可以在选定的输出文件句柄上启用autoflush(很可能是STDOUT)。然而,没有其他人说过,虽然你通常会重构和整理代码,但你真的应该用等效的代替它,但更明显

STDOUT->autoflush(1);