FileCache - 保持比系統允許更多的檔案開啟
no strict 'refs';
use FileCache;
# or
use FileCache maxopen => 16;
cacheout $mode, $path;
# or
cacheout $path;
print $path @data;
$fh = cacheout $mode, $path;
# or
$fh = cacheout $path;
print $fh @data;
cacheout
函式會確保有檔案句柄開啟,可以讀取或寫入您給定的路徑名稱。如果超過系統的最大檔案描述符數量,或建議的最大值 maxopen,它會自動關閉並重新開啟檔案。
cacheout 的 1 個參數形式會在第一次使用時開啟一個檔案進行寫入 ('>'
),之後會附加 ('>>'
)。
成功時會傳回 EXPR 以方便使用。如果您願意,可以忽略傳回值,並直接將 EXPR 視為檔案句柄進行操作。
cacheout 的 2 個參數形式會對初始和後續開啟使用提供的模式。支援大部分 3 個參數 open
的有效模式,即 '>'
、'+>'
、'<'
、'<+'
、'>>'
、 '|-'
和 '-|'
要將補充參數傳遞給使用 '|-'
或 '-|'
開啟的程式,請將它們附加到命令字串,就像系統 EXPR 一樣。
成功時會傳回 EXPR 以方便使用。如果您願意,可以忽略傳回值,並直接將 EXPR 視為檔案句柄進行操作。
雖然可以關閉
FileCache 管理的文件,但如果您從非導入它的套件呼叫 FileCache::cacheout
,或使用覆寫 close
的另一個模組,請不要這樣做。如果您必須這樣做,請使用 FileCache::cacheout_close
。
儘管 FileCache 可與管道開啟('-|' 或 '|-')搭配使用,但強烈建議不要這樣做。如果 FileCache 發現有必要關閉再重新開啟管道,管道另一端的指令將會重新執行 - 對 FileCache 管道執行 IO 的結果可能與您的預期不同。在未來的版本中,可能會移除 FileCache 在管道上使用的功能。
如果 FileCache 發現有必要關閉檔案,它不會儲存目前的檔案偏移量。當檔案重新開啟時,偏移量將會是原始 open
檔案模式所指定的。這可能會被視為一個錯誤。
模組功能仰賴符號參考,因此在「use strict」下會中斷,除非也指定「no strict 'refs'」。
sys/param.h 在某些系統上會與其 NOFILE
定義衝突,因此您可能必須自己設定 maxopen。