這種奇怪的興趣來自於擴展需求,沒有時間去改變設計(重構)。這當然不是好設計,但我現在需要處理它,希望稍後重構。設置一個文件句柄,以便打印到它被安靜地跳過?
早期打開幾個日誌文件,打印到整個代碼。新的要求意味着使用(新)命令行選項(--noflag
),這些日誌文件之一是不相關的。
我只能在此刻做的是墊的定義(open my $fh, ...
)和所有使用它(print $fh ...
)與。這顯然是不好的設計,它很容易出錯(這也不是很好)。
有沒有辦法做$fh
東西時,它與文件相關 使任何下列print $fh ...
由intepreter接受,但會導致根本無法運行print
,沒有錯誤? (讓我想象一下,比如說$fh = VOID if $flag;
。)或者,有沒有一些NULL
流或類似的東西?我所知道的全部是STDOUT
(1),STDERR
(2)和STDIN
(0)。
我不想讓$fh
在其他地方打印,理想情況下甚至不需要/dev/null
(如果可以的話)。我環顧四周,找不到任何相關的東西。如果事實上它已經在那裏,我會很高興指出信息。 任何想法表示讚賞。
PS。有人問過第一個問題(經過多年的使用),請告訴我它是否關閉。
UPDATE
感謝響應。他們提示我添加/改進此問題:是否打印標記爲/dev/null
可能已優化,以便「打印」實際上不會發生? (雖然我仍然對是否可以設置一個文件句柄來告訴Perl'不要在這裏打印'感興趣。)
我試圖避免在沒有添加條件的情況下運行void(print)語句。
更新/澄清
總結從註釋位(謝謝!):這不是對性能優化的追求。我完全同意在評論中所說的一切。只是執行毫無意義的陳述(通常大約一百萬)使我感到不安。另外,我對Perl沒有遇到的一些可能的黑暗角落感到好奇。如果你是在UNIX操作系統,你可以使用「的/ dev/null的」
open my $fh, '>', '/dev/null' or die 'This should never happen';
開發空會默默接受所有輸入上(這其中大部分已在答覆/意見得到解決。)
爲什麼是/ dev/null的不夠好?印刷本身的執行成本太高了嗎?然後你需要在你的代碼中添加一個條件。目標文件句柄不能阻止打印的發生(儘管你可能會重新定義打印效果......) – Thilo
@Thilo好吧。執行成本不會受到影響。但原則上我寧願不執行無效聲明。另外,我真的很好奇,是否可以設置一個文件句柄來告訴Perl'這裏不打印'。 – zdim
@zdim:如果'/ dev/null'是*「足夠好」*和*「執行成本不會受到影響」*那麼你有你的答案。如果你創建一個臨時黑客來完成工作,那麼你無法真正負擔執行*「無效聲明」*的挑剔。打開文件句柄到'/ dev/null'。這與 – Borodin