Perl sleep()的行为I don';我不明白

Perl sleep()的行为I don';我不明白,perl,Perl,我试图实现“倒计时”,从5到1,数字将被打印出来,然后等待1秒。但是,使用下面的代码,终端在5秒钟内不显示任何内容并打印5。。4.. 三。。2.. 1..。啊,什么 use strict; use warnings; use v5.16; # Test stuff, or so help me! for (reverse 1..5) { print "$_.. "; sleep 1; } say ''; 到终端的打印通常是行缓冲的。你必须冲洗标准液 print "$_..

我试图实现“倒计时”,从5到1,数字将被打印出来,然后等待1秒。但是,使用下面的代码,终端在5秒钟内不显示任何内容并打印
5。。4.. 三。。2.. 1..
。啊,什么

use strict;
use warnings;
use v5.16;

# Test stuff, or so help me!
for (reverse 1..5) {
    print "$_.. ";
    sleep 1;
}

say '';

到终端的打印通常是行缓冲的。你必须冲洗标准液

print "$_.. ";
flush STDOUT;
sleep 1;

或者您可以使用perl特殊变量$|并将其设置为非零值,perl将在每次写入后自动刷新

$|++;
# Or like this
$| = 1;

for (reverse 1..5) {
    print "$_.. ";
    sleep 1;
}

你试过刷新输出吗?也许可以添加如下内容:
BEGIN{select(STDERR);$|=1;select(STDOUT);$|=1;}
。请注意,
flush
不是一个内置函数,而是一个
IO::Handle
的方法——在较旧的perl上,这需要一个
使用IO::Handle
来激活。因为它是一个方法调用,所以应该改为编写
STDOUT->flush
。否则,+1表示优雅的解决方案