2013-12-19 50 views
7

IO :: File,IO :: Socket :: INET模塊比直接使用perl的內置IO函數具有一些優點,例如具有顯式語法來刷新句柄。從IO :: File獲取異常?

但是,它們似乎比內置IO功能有一些缺點。例如,據我所知,他們不能與autodie模塊組合以在失敗時引發異常,所以我發現自己不得不編寫更多的樣板代碼來處理失敗,而不是使用內置函數。

有沒有辦法將兩者或其他一些具有組合功能的模塊結合起來?我注意到一些有限的目的IO模塊,例如File :: Slurp,確實允許更靈活的錯誤處理。

我正在寫模塊代碼,理想情況下,解決方案應該一路回到perl 5.10.0。

+8

注意,文件句柄/包含'反正IO :: File'對象(給定一個足夠現代的perl,或者'use IO :: File'來加載方法) - 所以你可以使用像open這樣的內建函數而不會放棄OOP特性。 – amon

回答

2

你看過Path :: Tiny嗎?語法不同,但它確實會拋出異常。

E.G.

use Path::Tiny; 
path('/non/existent/file')->openr; 

將與路徑死::微型:: Exception對象(假設你沒有這樣的文件)