2013-09-28 83 views
0

我想在同一位置覆蓋所有打印結果。它不應該滾動。我想要無限的時間。爲此我已經使用(1)並且它正在正常工作。但問題在於,我每次打印該聲明時,都會向下滾動並且想要更改。 我希望它能打印出來,或者你可以在同一個地方覆蓋它。覆蓋perl中相同位置的所有打印件

請問一些人可以幫助我嗎?

我也嘗試在兩個打印語句中使用\ r,但它只更新最後一個打印語句在同一個地方。

while(1) 
{ 
.... // some lines of code // 

print("\n******** Interrupts *********\n"); 
for($k=0; $k<$t_intr; $k++) 
{ 
    $intr_diff = $total_intr_curr[$k] - $total_intr_prev[$k]; 
    #push(@intr_diff_arr,$intr_diff); 
    print("Intr : $intr_diff\n"); // want to update this print at same place // 

} 

print("\n******** Context switches *********\n"); 

for($l=0; $l<$t_ctxt; $l++) 
{ 
    $cntx_min = 0; 
    $ctxt_diff = $total_ctxt_curr - $total_ctxt_prev; 
    push(@ctxt_diff_arr,$ctxt_diff); 
    $min = min @ctxt_diff_arr; 
    $max = max @ctxt_diff_arr; 
    print("Ctxt : $ctxt_diff Minimum : $min Maximum : $max\n"); // want to update this print also at same place // 
} 

}// infinite while loop end // 

謝謝。

+1

你是什麼意思*它只更新最後一個打印語句在同一個地方*? – madfriend

+0

這可能意味着您無法快速閱讀,或者您的顯示器顯示速度不夠快。嘗試在打印後添加一個微睡眠(使用'\ r'回車),然後看看會發生什麼。 –

+0

//我在某些代碼行中使用了sleep(3)// ...和「它僅更新最後一個打印語句」表示它只覆蓋此打印語句print(「Ctxt:$ ctxt_diff最小值:$ min最大值:$最大\ n「);不是上面那個... – user2342605

回答

1

除非你的終端設置做一些有趣的事情與映射到CR NL,這應該工作:

#!/usr/bin/env perl 
use strict; 
use warnings; 

$| = 1; 

foreach my $i (1..20) 
{ 
    print "\rLine $i"; 
    sleep 1; 
} 
print "\n"; 

$| = 1;設置;這是獲得輸出結果所必需的。當它被刪除時,我只能看到輸出的最後一行,並且只有20秒之後。但是,輸出的十六進制轉儲表明所有數據都已發送;它只是在最後打印換行符時才發送。