我真的不知道怎么说这个问题,所以我会举一个例子来说明我要做的事情。
我有一个脚本,我需要使用睡眠功能几秒钟。但在我“睡觉”之前,我需要传达一条信息,例如“睡觉......”。但是在完成睡眠之后,我需要打印“完成”。所以终端窗口看起来像这样:Sleeping... done
,这是我的代码:
#!/usr/bin/perl
print "Sleeping... ";
sleep(1);
print "done";
但是会发生什么,脚本会休眠,然后一次输出Sleeping... done
。
是否可以打印“睡觉......”,然后实际上进入“睡眠”,最后打印“完成”,但是一切都在一行?
答案 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()
。)