在Perl中如何立即打印文本而不等待换行?

14

我在perl中有一个计算密集型任务,希望在每完成一部分计算后通过打印出一个句点来告知用户计算正在进行。不幸的是,直到我打印"\n"之前,我的句点都不会被打印出来。我该如何解决这个问题?

5个回答

17

你需要为STDOUT设置autoflush。例如:

use IO::Handle;
STDOUT->autoflush(1);
foreach (1..20) {
  print '.';
  sleep(1);
}

2
@Hans 请不要链接到未经授权的书籍副本。 - Sinan Ünür
请查看 http://oreilly.com/catalog/9780596003135 和 http://oreilly.com/catalog/9780596003135。 - Sinan Ünür
抱歉,这只是在我搜索网络时弹出来的。现在已经删除了链接。 - Hans W

7
在开始打印之前,设置$|=1。例如:
perl -e ' $|=1; foreach (1..10) { print "$_ "; sleep(1); }'

@ar,“STDOUT->autoflush(1)”与“$|=1”相同,除了“$|=1”是全局的,而“STDOUT->autoflush(1)”是针对一个句柄的。 - Evan Carroll
除非你使用IO::Handle。虽然 IO::Handle 已经成为标准模块很长时间了,但是...是的。:( - Robert P

4

2

0

对我来说有效的方法是加入这行代码

STDOUT->autoflush(1);

在我的代码行之前

print ".";

在我的现有循环内。由于担心减慢速度,因此没有使用睡眠。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接