在Perl中启动while循环之前如何打印?

时间:2018-06-30 19:32:38

标签: perl printing while-loop

我在Perl中有此代码:

print "Processing ... ";
while ( some condition ) {
    # do something over than 10 minutes
}
print "OK\n";

现在, while循环结束后,我将获得第一张纸。

在while循环开始之前,如何在之前打印消息?

3 个答案:

答案 0 :(得分:6)

输出被缓冲,这意味着程序将决定何时实际渲染您print编辑过的内容。你可以放

$| = 1;

在此单个实例中刷新stdout。有关更多方法(自动刷新,文件刷新等),您可以在SO周围搜索有关此问题的信息。

答案 1 :(得分:6)

通常,perl在将输出文本刷新到设备之前会缓冲最多8KB的输出文本,如果设备是终端设备,则最多可以缓冲到下一个换行符。您可以通过添加

来避免这种情况
STDOUT->autoflush
假设您要打印到STDOUT,请

到代码顶部。这将强制在每次printsaywrite操作之后刷新数据

请注意,这与使用$| = 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并搜索/\>\&/