2011-04-17 85 views
4

我有以下代碼來打印「。」每秒鐘模擬一個進度條。當使用Sleep()時Perl打印功能無法正常工作

$num = 15; 
while($num--){ 
    sleep(1); 
    print "."; 
} 

我現在面臨的問題是「。」每個循環後都不打印字符。相反,所有15個「。」在循環退出後立即打印。但是,如果我打印「。\ n」,它工作正常。但是「。」每次都會印上新的一行,這不是我想要的。

這似乎很奇怪,不知道爲什麼。任何人都可以提供幫助嗎?謝謝。

問候, 阿倫

回答

20

這可能是因爲I/O被緩衝。嘗試禁用緩衝(自動刷新):

$| = 1; 

在循環之前。

更完整的解釋,請參閱How do I flush/unbuffer an output filehandle? Why must I do this?

+0

謝謝Mat,這個作品很棒!我將閱讀你推薦的文章。回答我的問題的速度讓我感到驚訝。我希望今晚晚上睡覺前能得到答案。 – Allen 2011-04-17 12:05:43

1

標準輸出流通常是緩衝。嘗試在每個打印語句後清空輸出流。請參閱Perl Cookbook, §7.13以獲取詳細的解釋和解決方案。

+0

感謝您的解釋Philip。緩衝確實是問題。 – Allen 2011-04-17 12:08:14

+1

請不要鏈接到盜版內容 – ysth 2011-04-18 04:51:36

4

您需要在標準輸出禁用緩衝。請參閱$| in perlfaq

+0

謝謝@aschepler,禁用令人討厭的,它工作正常。 – Allen 2011-04-17 12:07:21

+1

應該始終在每個Perl腳本的頂部禁用排錯。 – mob 2011-04-18 03:34:03