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

All*_*len 5 perl

我有以下代码来打印"." 每秒钟模拟一个进度条.

$num = 15;
while($num--){
    sleep(1);
    print ".";
}
Run Code Online (Sandbox Code Playgroud)

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

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

问候,艾伦

Mat*_*Mat 21

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

$| = 1;
Run Code Online (Sandbox Code Playgroud)

循环之前.

有关更完整的说明,请参阅如何刷新/取消缓冲输出文件句柄?我为什么要这样做?