我有以下代码来打印“。”每秒钟模拟一个进度条。当使用Sleep()时Perl打印功能无法正常工作
$num = 15;
while($num--){
sleep(1);
print ".";
}
我现在面临的问题是“。”每个循环后都不打印字符。相反,所有15个“。”在循环退出后立即打印。但是,如果我打印“。\ n”,它工作正常。但是“。”每次都会印上新的一行,这不是我想要的。
这似乎很奇怪,不知道为什么。任何人都可以提供帮助吗?谢谢。
问候, 阿伦
我有以下代码来打印“。”每秒钟模拟一个进度条。当使用Sleep()时Perl打印功能无法正常工作
$num = 15;
while($num--){
sleep(1);
print ".";
}
我现在面临的问题是“。”每个循环后都不打印字符。相反,所有15个“。”在循环退出后立即打印。但是,如果我打印“。\ n”,它工作正常。但是“。”每次都会印上新的一行,这不是我想要的。
这似乎很奇怪,不知道为什么。任何人都可以提供帮助吗?谢谢。
问候, 阿伦
这可能是因为I/O被缓冲。尝试禁用缓冲(自动刷新):
$| = 1;
在循环之前。
更完整的解释,请参阅How do I flush/unbuffer an output filehandle? Why must I do this?
标准输出流通常是缓冲。尝试在每个打印语句后清空输出流。请参阅Perl Cookbook, §7.13以获取详细的解释和解决方案。
您需要在标准输出禁用缓冲。请参阅$|
in perlfaq
谢谢Mat,这个作品很棒!我将阅读你推荐的文章。回答我的问题的速度让我感到惊讶。我希望今晚晚上睡觉前能得到答案。 – Allen 2011-04-17 12:05:43