使用Sleep()时,Perl Print功能无法正常工作

时间:2011-04-17 11:49:30

标签: perl

我有以下代码来打印“。”每秒钟模拟一个进度条。

$num = 15;
while($num--){
    sleep(1);
    print ".";
}

我现在遇到的问题是“。”每个循环后不打印字符。相反,所有15“。”在循环退出后立即打印。但是,如果我打印“。\ n”,它可以正常工作。但是“。”每次都会打印出一条新线,这不是我想要的。

看起来很奇怪,无法弄清楚原因。有人可以提供一些帮助吗?谢谢。

此致 艾伦

3 个答案:

答案 0 :(得分:21)

这可能是因为I / O正在被缓冲。尝试禁用缓冲(autoflush):

$| = 1;
在你的循环之前

有关更完整的说明,请参阅How do I flush/unbuffer an output filehandle? Why must I do this?

答案 1 :(得分:4)

您需要在STDOUT上禁用缓冲。见$| in perlfaq

答案 2 :(得分:1)

标准输出流通常是缓冲的。尝试在每个print语句后刷新输出流。有关详细说明和解决方案,请参阅Perl Cookbook, §7.13