我試圖實現'倒數',從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 '';
我試圖實現'倒數',從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 '';
打印到終端通常是行緩衝的。你必須刷新標準輸出。
print "$_.. ";
flush STDOUT;
sleep 1;
請注意'flush'不是內建函數,而是'IO :: Handle'的方法 - 在較老的perls上,這需要使用IO :: Handle來激活。因爲它是一個方法調用,所以應該寫入'STDOUT-> flush'。否則,+1爲優雅的解決方案 – amon
或者您可以使用perl特殊變量$ |,並將其設置爲非零值,Perl將在每次寫入後自動刷新。
$|++;
# Or like this
$| = 1;
for (reverse 1..5) {
print "$_.. ";
sleep 1;
}
您是否嘗試過沖洗輸出?也許增加如下內容:'BEGIN {select(STDERR); $ | = 1;選擇(STDOUT); $ | = 1; }' – Steve
[Similar](http://stackoverflow.com/questions/21948849/how-to-create-a-waiting-ellipsis-in-a-perl-program)。 – Kenosis