[精讚] [會員登入]
895

[PERL] Perl 不立即輸出的列印緩衝區問題

解決Perl 不立即輸出而是最後一次輸出的列印緩衝區問題

分享此文連結 //n.sfs.tw/10673

分享連結 [PERL] Perl 不立即輸出的列印緩衝區問題@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-22 15:15:29 最後編修
2017-01-24 08:44:36 By 張○○
 

從下面的程式範例開始,在控制台(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);
}

就可以解決這個問題。但這不是好的作法,因為 $|只要設定一次即可,所以下面才是好的作法:

$|=1;
for(1..100){
    print ".";
    sleep(1);
}

原文 2009-11-26 23:53:54

END

你可能感興趣的文章

Perl 的列舉寫法(map list) 使用列舉的寫法來設定陣列,非常的強大

[PERL] 14-進階比對 #1--取回比對內容 perl的正規表達式進階比對

[PERL] 12- 副程式 Perl 的副程式就是所謂的函數

[PERL]] find 和 perl 的結合--大量檔案中文字的取代 利用PERL作大量的文件取代

[PERL] split 寫法 Perl 將字串分開可以用 split 這個函數,此函數可以用Regex作分隔判斷

[PERL] 自寫 trim, ltrim, rtrim 函數 常用的 perl 函數中沒有trim, ltrim, rtrim這三個函數,那就自己來寫,非常容易

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[AS3] 我做的唯一一個Flash As3遊戲UFO INVADSION [AS3] 我做的唯一一個Flash As3遊戲,是第一個也是最後一個,後來就沒再寫as3,不過as3還滿好玩的。

[Wildfly10] 發佈war檔 deploy war file onto wildfly10

[NetBeans] 使用git複製別人的專案 NetBeans使用git複製別人的專案及版本控制

「許功蓋」的字以及源由 有玩過電腦一段時間的人,都聽過這個人(有一天我才發現7年級的竟然都不認識這個

[MYSQL] 設定字串欄位的預設值 新增表格的時候,字串欄位給予預設空值;數字欄位給預設數值;日期欄位給空值。