從下面的程式範例開始,在控制台(console)中執行這個perl程式,每隔1秒列印 '.',共100秒:
for(1..100){
print ".";
sleep(1);
}
結果並不會1秒印一個點 '.' 出來,而是到了100秒之後,一次把100個點印出來出來。
而我不要這樣的結果,我想要一個個點分別印出來,因此查找了一下,發現這是列印緩衝區的問題:
除非 print 遇到換行 "\n"或結束,否則他不會輸出到STDOUT(檔案或console或印表機)
要將內容直接送出,就要用到特殊變數 $|,也就是一個錢號'$'和一個垂直線'|'。當$|為非0值時,他會將緩衝區的文字送出。因此程式改寫如下:
for(1..100){
print ".";
$|=1;
sleep(1);
}
print ".";
$|=1;
sleep(1);
}
就可以解決這個問題。但這不是好的作法,因為 $|只要設定一次即可,所以下面才是好的作法:
$|=1; for(1..100){ print "."; sleep(1); }
原文 2009-11-26 23:53:54