我真的不知道该如何措辞,因此,我将举一个例子说明我要做什么。
我有一个脚本,需要在其中使用睡眠功能几秒钟。但是在我进入“睡眠”之前,我需要先说一条消息,例如“ Sleeping ...”。但是,在完成睡眠之后,我需要打印“完成”。因此终端窗口的外观将是这样的:Sleeping... done
,这是我的代码:
#!/usr/bin/perl
print "Sleeping... ";
sleep(1);
print "done";
但是发生的是,脚本进入睡眠状态,然后立即全部输出
Sleeping... done
。是否可以打印“ Sleeping ...”,然后实际进入“ sleep”,最后打印“ done”,但所有内容都在一行上?
最佳答案
您可以通过将$|
设置为非零值来对文件句柄启用自动刷新,例如:
local $| = 1;
因此,您的完整脚本是:
#!/usr/bin/perl
use strict;
use warnings;
local $| = 1;
print "Sleeping... ";
sleep(1);
print "done";
您可以通过将
$|
设置为0
将其关闭,如果这只是较大脚本的一小部分,则应执行此操作。由于某种原因,默认情况下将输出缓冲。