2

我真的不知道如何表达这个问题,所以我将举例说明我正在尝试做的事情。

我有一个脚本,我需要在其中使用睡眠功能几秒钟。但在我去“睡觉”之前,我需要有一条消息说,例如“睡觉……”。但是在它完成睡眠后,我需要打印“完成”。所以终端窗口看起来会是这样的:Sleeping... done,这是我的代码:

#!/usr/bin/perl

print "Sleeping... ";
sleep(1);
print "done";

但发生的情况是,脚本休眠,然后Sleeping... done一次全部输出。

是否可以打印“Sleeping...”,然后实际进入“sleep”,最后打印“done”,但所有内容都在一行上?

4

3 回答 3

8

$|您可以通过设置为非零值来启用文件句柄上的自动刷新,例如:

local $| = 1;

所以你的完整脚本将是:

#!/usr/bin/perl

use strict;
use warnings;

local $| = 1;

print "Sleeping... ";
sleep(1);
print "done";

$|您可以通过设置为将其关闭,0如果这只是较大脚本的一小部分,您应该这样做。默认情况下输出缓冲是有原因的。

于 2012-08-23T15:45:21.737 回答
0

采用

$| = 1

禁用缓冲输出。然后您的脚本按预期工作。

于 2012-08-23T15:47:55.117 回答
0

备择方案:

select()->autoflush();   # Same as:  $| = 1;
print "Sleeping... ";
sleep(1);
print "done\n";

print "Sleeping... ";
select()->flush();       # Same as:  my $saved = $|; $| = 1; $| = $saved;
sleep(1);
print "done\n";

(如果您不使用,则可以替换select()为。)STDOUTselect()

于 2012-08-23T18:27:07.877 回答