有没有办法打印两次但在每次打印调用之间睡觉,但是在同一行打印?

时间:2012-08-23 15:41:15

标签: perl

我真的不知道怎么说这个问题,所以我会举一个例子来说明我要做的事情。

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

#!/usr/bin/perl

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

但是会发生什么,脚本会休眠,然后一次输出Sleeping... done

是否可以打印“睡觉......”,然后实际上进入“睡眠”,最后打印“完成”,但是一切都在一行?

3 个答案:

答案 0 :(得分:8)

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

local $| = 1;

所以你的完整剧本将是:

#!/usr/bin/perl

use strict;
use warnings;

local $| = 1;

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

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

答案 1 :(得分:0)

使用

$| = 1

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

答案 2 :(得分: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(),则可以将STDOUT替换为select()。)