我正在重新考虑一些perl代码,而且看起来似乎就是这样,Perl有一些奇怪的结构,这些结构很难查找。
在这种情况下,我遇到了以下内容......
$|++;
在"使用"之后,这本身就是一条线。声明。
这个命令有什么作用?
答案 0 :(得分:5)
<强>
$|
强>如果设置为非零,则在当前所选输出通道上的每次写入或打印后立即强制刷新。默认值为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)
答案 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);