我有以下代码来打印“。”每秒钟模拟一个进度条。
$num = 15;
while($num--){
sleep(1);
print ".";
}
我现在遇到的问题是“。”每个循环后不打印字符。相反,所有15“。”在循环退出后立即打印。但是,如果我打印“。\ n”,它可以正常工作。但是“。”每次都会打印出一条新线,这不是我想要的。
看起来很奇怪,无法弄清楚原因。有人可以提供一些帮助吗?谢谢。
此致 艾伦
答案 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。