2014-02-22 82 views
0

我試圖實現'倒數',從5到1的數字將被打印,然後等待1秒。但是,使用下面的代碼,終端顯示5秒鐘並打印5.. 4.. 3.. 2.. 1..。呃,什麼?Perl睡眠的行爲()我不明白

use strict; 
use warnings; 
use v5.16; 

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

say ''; 
+0

您是否嘗試過沖洗輸出?也許增加如下內容:'BEGIN {select(STDERR); $ | = 1;選擇(STDOUT); $ | = 1; }' – Steve

+3

[Similar](http://stackoverflow.com/questions/21948849/how-to-create-a-waiting-ellipsis-in-a-perl-program)。 – Kenosis

回答

6

打印到終端通常是行緩衝的。你必須刷新標準輸出。

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

請注意'flush'不是內建函數,而是'IO :: Handle'的方法 - 在較老的perls上,這需要使用IO :: Handle來激活。因爲它是一個方法調用,所以應該寫入'STDOUT-> flush'。否則,+1爲優雅的解決方案 – amon

2

或者您可以使用perl特殊變量$ |,並將其設置爲非零值,Perl將在每次寫入後自動刷新。

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

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