我有以下代碼來打印「。」每秒鐘模擬一個進度條。當使用Sleep()時Perl打印功能無法正常工作
$num = 15;
while($num--){
sleep(1);
print ".";
}
我現在面臨的問題是「。」每個循環後都不打印字符。相反,所有15個「。」在循環退出後立即打印。但是,如果我打印「。\ n」,它工作正常。但是「。」每次都會印上新的一行,這不是我想要的。
這似乎很奇怪,不知道爲什麼。任何人都可以提供幫助嗎?謝謝。
問候, 阿倫
我有以下代碼來打印「。」每秒鐘模擬一個進度條。當使用Sleep()時Perl打印功能無法正常工作
$num = 15;
while($num--){
sleep(1);
print ".";
}
我現在面臨的問題是「。」每個循環後都不打印字符。相反,所有15個「。」在循環退出後立即打印。但是,如果我打印「。\ n」,它工作正常。但是「。」每次都會印上新的一行,這不是我想要的。
這似乎很奇怪,不知道爲什麼。任何人都可以提供幫助嗎?謝謝。
問候, 阿倫
這可能是因爲I/O被緩衝。嘗試禁用緩衝(自動刷新):
$| = 1;
在循環之前。
更完整的解釋,請參閱How do I flush/unbuffer an output filehandle? Why must I do this?
標準輸出流通常是緩衝。嘗試在每個打印語句後清空輸出流。請參閱Perl Cookbook, §7.13以獲取詳細的解釋和解決方案。
您需要在標準輸出禁用緩衝。請參閱$|
in perlfaq
謝謝Mat,這個作品很棒!我將閱讀你推薦的文章。回答我的問題的速度讓我感到驚訝。我希望今晚晚上睡覺前能得到答案。 – Allen 2011-04-17 12:05:43