Perl睡眠的行为()我不明白

时间:2014-02-22 07:26:08

标签: perl

我试图实现'倒计时',从5到1将打印数字,然后等待1秒钟。但是,使用下面的代码,终端将显示5秒钟内的任何内容并打印5.. 4.. 3.. 2.. 1..。呃,什么?

use strict;
use warnings;
use v5.16;

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

say '';

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

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

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

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