內容

名稱

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

建構函式

new ( [ARGS] )

建立一個 IO::Zlib 物件。如果它收到任何參數,它們會傳遞給方法 open;如果開啟失敗,物件會被銷毀。否則,它會傳回給呼叫者。

物件方法

open ( FILENAME, MODE )

open 接受兩個參數。第一個是要開啟的檔案名稱,第二個是開啟模式。模式可以是 Compress::Zlib 可接受的任何模式,進一步來說,就是 zlib 可接受的任何模式(這基本上表示 POSIX fopen() 風格模式字串,加上一個表示壓縮層級的選用數字)。

opened

如果物件目前參照已開啟的檔案,則傳回 true。

close

關閉與物件相關聯的檔案,並解除檔案與控制代碼的關聯。在銷毀時自動完成。

getc

傳回檔案中的下一個字元,如果沒有剩餘字元,則傳回未定義。

getline

傳回檔案中的下一行,或在字串結束時傳回未定義。可以在陣列內容中安全地呼叫。目前忽略 $/ ($INPUT_RECORD_SEPARATOR 或在使用 英文 時的 $RS),並將行視為以「\n」分隔。

getlines

取得檔案中所有剩餘行。如果意外在純量內容中呼叫,它會 croak()。

將 ARGS 列印至檔案。

read ( BUF, NBYTES, [OFFSET] )

從檔案讀取一些位元組。傳回實際讀取的位元組數目,檔案結束時為 0,錯誤時為未定義。

eof

如果目前處理程序位於檔案結尾,傳回 true?

seek ( OFFSET, WHENCE )

尋找串流中給定的位置。尚未支援。

tell

傳回串流中目前的位置,為數字偏移量。尚未支援。

setpos ( POS )

設定目前位置,使用 getpos() 傳回的不透明值。尚未支援。

getpos ( POS )

傳回字串中目前的位置,為不透明物件。尚未支援。

使用外部 GZIP

如果使用外部 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,且讀取開啟必須以管線符號結束,而寫入開啟必須以管線符號開始。

類別方法

has_Compress_Zlib

如果 Compress::Zlib 可用,傳回 true。請注意,這並不表示正在使用 Compress::Zlib:請參閱 "gzip_external"gzip_used

gzip_external

如果 Compress::Zlib 不可用(請參閱 "has_Compress_Zlib"),則未定義是否可以使用外部 gzip,如果明確使用外部 gzip 則為 true,如果不得使用外部 gzip 則為 false。請參閱 "gzip_used"

gzip_used

如果正在使用外部 gzip,則為 True,否則為 false。

gzip_read_open

傳回用於使用外部 gzip 開啟檔案進行讀取的「指令」。

gzip_write_open

傳回用於使用外部 gzip 開啟檔案進行寫入的「指令」。

診斷

IO::Zlib::getlines:必須在串列內容中呼叫

如果您要讀取行,您必須在串列內容中讀取。

IO::Zlib::gzopen_external:模式「...」是非法的

僅使用模式「rb」或「wb」或 /wb[1-9]/。

IO::Zlib::import:'...''是非法的

已知的匯入符號為 :gzip_external:gzip_read_open:gzip_write_open。其他任何內容皆無法辨識。

IO::Zlib::import:':gzip_external' 需要一個引數

:gzip_external 需要一個布林引數。

IO::Zlib::import:'gzip_read_open' 需要一個引數

:gzip_external 需要一個字串引數。

IO::Zlib::import:'gzip_read' '...' 是非法的

:gzip_read_open 引數必須以管線符號 (|) 結尾,並為檔案名稱設定 %s。請參閱 "使用外部 GZIP"

IO::Zlib::import:'gzip_write_open' 需要一個引數

:gzip_external 需要一個字串引數。

IO::Zlib::import:'gzip_write_open' '...' 是非法的

:gzip_write_open 引數必須以管線符號 (|) 開頭,並為檔案名稱設定 %s。輸出重新導向 (>) 通常也是個好主意,具體取決於您的作業系統殼層語法。請參閱 "使用外部 GZIP"

IO::Zlib::import:沒有 Compress::Zlib 且沒有外部 gzip

假設我們載入不了 Compress::Zlib 且停用外部 gzip,那麼 IO::Zlib 幾乎無法運作。

IO::Zlib::open:需要檔案名稱

沒有檔案名稱,就無法開啟。

IO::Zlib::READ:必須指定 NBYTES

我們必須知道要讀取多少資料。

IO::Zlib::WRITE:太長的 LENGTH

LENGTH 必須小於或等於緩衝區大小。

另請參閱

perlfunc"perlop 中的 I/O 運算子"IO::HandleCompress::Zlib

歷史記錄

由 Tom Hughes <tom@compton.nu> 建立。

Jarkko Hietaniemi <jhi@iki.fi> 加入對外部 gzip 的支援。

版權

版權所有 (c) 1998-2004 Tom Hughes <tom@compton.nu>。保留所有權利。此程式為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。