我在Perl
中有此代码:
print "Processing ... ";
while ( some condition ) {
# do something over than 10 minutes
}
print "OK\n";
现在, while循环结束后,我将获得第一张纸。
在while循环开始之前,如何在之前打印消息?
答案 0 :(得分:6)
输出被缓冲,这意味着程序将决定何时实际渲染您print
编辑过的内容。你可以放
$| = 1;
在此单个实例中刷新stdout
。有关更多方法(自动刷新,文件刷新等),您可以在SO周围搜索有关此问题的信息。
答案 1 :(得分:6)
通常,perl在将输出文本刷新到设备之前会缓冲最多8KB的输出文本,如果设备是终端设备,则最多可以缓冲到下一个换行符。您可以通过添加
来避免这种情况STDOUT->autoflush
假设您要打印到STDOUT
,请到代码顶部。这将强制在每次print
,say
或write
操作之后刷新数据
请注意,这与使用$| = 1
相同,但隐秘性明显降低,并且允许您更改任何给定文件句柄的属性
答案 2 :(得分:0)
您可以在之后立即刷新缓冲区以查看打印内容。
print "Processing ... ";
STDOUT->flush;
如果您使用的是autoflush
,则应通过复制文件句柄来保存当前配置。
use autodie; # dies if error on open and close.
{
STDOUT->flush; # empty its buffer
open my $saved_stdout, '>&', \*STDOUT;
STDOUT->autoflush;
# ... output with autoflush active
open STDOUT, '>&', $saved_stdout; # restore old STDOUT
}
请参见perldoc -f open
并搜索/\>\&/