IO::Zlib - IO:: 樣式介面至 Compress::Zlib
在任何版本的 Perl 5 中,您都可以使用基本的 OO 介面
use IO::Zlib;
$fh = new IO::Zlib;
if ($fh->open("file.gz", "rb")) {
print <$fh>;
$fh->close;
}
$fh = IO::Zlib->new("file.gz", "wb9");
if (defined $fh) {
print $fh "bar\n";
$fh->close;
}
$fh = IO::Zlib->new("file.gz", "rb");
if (defined $fh) {
print <$fh>;
undef $fh; # automatically closes the file
}
在 Perl 5.004 中,您也可以使用 TIEHANDLE 介面來存取壓縮檔案,就像一般的檔案一樣
use IO::Zlib;
tie *FILE, 'IO::Zlib', "file.gz", "wb";
print FILE "line 1\nline2\n";
tie *FILE, 'IO::Zlib', "file.gz", "rb";
while (<FILE>) { print "LINE: ", $_ };
IO::Zlib
提供 IO:: 樣式介面至 Compress::Zlib,因此也能提供至 gzip/zlib 壓縮檔案。它提供了許多與 IO::Handle 介面相同的方法。
從 IO::Zlib 版本 1.02 開始,IO::Zlib 也能使用外部 gzip 指令。預設行為是嘗試使用外部 gzip,如果無法載入 Compress::Zlib
,除非明確停用
use IO::Zlib qw(:gzip_external 0);
如果明確啟用
use IO::Zlib qw(:gzip_external 1);
則外部 gzip 會用於 取代 Compress::Zlib
。
建立一個 IO::Zlib
物件。如果它收到任何參數,它們會傳遞給方法 open
;如果開啟失敗,物件會被銷毀。否則,它會傳回給呼叫者。
open
接受兩個參數。第一個是要開啟的檔案名稱,第二個是開啟模式。模式可以是 Compress::Zlib 可接受的任何模式,進一步來說,就是 zlib 可接受的任何模式(這基本上表示 POSIX fopen() 風格模式字串,加上一個表示壓縮層級的選用數字)。
如果物件目前參照已開啟的檔案,則傳回 true。
關閉與物件相關聯的檔案,並解除檔案與控制代碼的關聯。在銷毀時自動完成。
傳回檔案中的下一個字元,如果沒有剩餘字元,則傳回未定義。
傳回檔案中的下一行,或在字串結束時傳回未定義。可以在陣列內容中安全地呼叫。目前忽略 $/ ($INPUT_RECORD_SEPARATOR 或在使用 英文 時的 $RS),並將行視為以「\n」分隔。
取得檔案中所有剩餘行。如果意外在純量內容中呼叫,它會 croak()。
將 ARGS 列印至檔案。
從檔案讀取一些位元組。傳回實際讀取的位元組數目,檔案結束時為 0,錯誤時為未定義。
如果目前處理程序位於檔案結尾,傳回 true?
尋找串流中給定的位置。尚未支援。
傳回串流中目前的位置,為數字偏移量。尚未支援。
設定目前位置,使用 getpos()
傳回的不透明值。尚未支援。
傳回字串中目前的位置,為不透明物件。尚未支援。
如果使用外部 gzip,則使用下列 open
open(FH, "gzip -dc $filename |") # for read opens
open(FH, " | gzip > $filename") # for write opens
例如,您可以修改「指令」,以透過例如硬連接絕對路徑。
use IO::Zlib ':gzip_read_open' => '/some/where/gunzip -c %s |';
use IO::Zlib ':gzip_write_open' => '| /some/where/gzip.exe > %s';
%s
會擴充為檔案名稱(使用 sprintf
,因此請小心跳脫其他 %
符號)。「指令」會檢查健全性 - 它們必須包含 %s
,且讀取開啟必須以管線符號結束,而寫入開啟必須以管線符號開始。
如果 Compress::Zlib
可用,傳回 true。請注意,這並不表示正在使用 Compress::Zlib
:請參閱 "gzip_external" 和 gzip_used。
如果 Compress::Zlib
不可用(請參閱 "has_Compress_Zlib"),則未定義是否可以使用外部 gzip,如果明確使用外部 gzip 則為 true,如果不得使用外部 gzip 則為 false。請參閱 "gzip_used"。
如果正在使用外部 gzip,則為 True,否則為 false。
傳回用於使用外部 gzip 開啟檔案進行讀取的「指令」。
傳回用於使用外部 gzip 開啟檔案進行寫入的「指令」。
如果您要讀取行,您必須在串列內容中讀取。
僅使用模式「rb」或「wb」或 /wb[1-9]/。
已知的匯入符號為 :gzip_external
、:gzip_read_open
和 :gzip_write_open
。其他任何內容皆無法辨識。
:gzip_external
需要一個布林引數。
:gzip_external
需要一個字串引數。
:gzip_read_open
引數必須以管線符號 (|) 結尾,並為檔案名稱設定 %s
。請參閱 "使用外部 GZIP"。
:gzip_external
需要一個字串引數。
:gzip_write_open
引數必須以管線符號 (|) 開頭,並為檔案名稱設定 %s
。輸出重新導向 (>) 通常也是個好主意,具體取決於您的作業系統殼層語法。請參閱 "使用外部 GZIP"。
假設我們載入不了 Compress::Zlib
且停用外部 gzip,那麼 IO::Zlib 幾乎無法運作。
沒有檔案名稱,就無法開啟。
我們必須知道要讀取多少資料。
LENGTH 必須小於或等於緩衝區大小。
perlfunc、"perlop 中的 I/O 運算子"、IO::Handle、Compress::Zlib
由 Tom Hughes <tom@compton.nu> 建立。
Jarkko Hietaniemi <jhi@iki.fi> 加入對外部 gzip 的支援。
版權所有 (c) 1998-2004 Tom Hughes <tom@compton.nu>。保留所有權利。此程式為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。