[精讚] [會員登入]
1116

[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] 19-模組的安裝和維護 模組的安裝和維護

Perl的類別物件利器 bless 使用bless來替perl建立class物件。

[PERL] 命令列傳入參數 argv Perl 的外部傳參,是$ARGV[0]、$ARGV[1]、$ARGV[2].....

[PERL] Regex 字元集(群組) 幾個Perl在regular express會用到的特殊符號notation:字元集

[PERL] 10- 雜湊 Perl 的hash 指標陣列

自行撰寫syslog server建立資訊安全控管中心#2 -- 架構和作法 利用PERL將syslog收攏到資料庫的程式,架構和作法

隨機好文

SELinux 常用指令和檔案 在Redhat系列中,Centos5以後加入了selinux,他並沒有這麼可怕,不必每次看到Selinux ,就想把他

[札記] 2016.7~12月札記 札記,只是札記

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

[Javascript] 偵錯方式 (火狐中的javascript偵錯) javascript 並不是很容易偵錯(debug)的語言,但那是以前,現在有很多瀏覽器支持很多的工具,此文以火狐為例談談偵錯...

[SIP] OPENSER LINUX版本安裝全記錄 [SIP] OPENSER LINUX版本安裝全記錄