Compress::Zlib - zlib 壓縮函式庫介面
use Compress::Zlib ;
($d, $status) = deflateInit( [OPT] ) ;
$status = $d->deflate($input, $output) ;
$status = $d->flush([$flush_type]) ;
$d->deflateParams(OPTS) ;
$d->deflateTune(OPTS) ;
$d->dict_adler() ;
$d->crc32() ;
$d->adler32() ;
$d->total_in() ;
$d->total_out() ;
$d->msg() ;
$d->get_Strategy();
$d->get_Level();
$d->get_BufSize();
($i, $status) = inflateInit( [OPT] ) ;
$status = $i->inflate($input, $output [, $eof]) ;
$status = $i->inflateSync($input) ;
$i->dict_adler() ;
$d->crc32() ;
$d->adler32() ;
$i->total_in() ;
$i->total_out() ;
$i->msg() ;
$d->get_BufSize();
$dest = compress($source) ;
$dest = uncompress($source) ;
$gz = gzopen($filename or filehandle, $mode) ;
$bytesread = $gz->gzread($buffer [,$size]) ;
$bytesread = $gz->gzreadline($line) ;
$byteswritten = $gz->gzwrite($buffer) ;
$status = $gz->gzflush($flush) ;
$offset = $gz->gztell() ;
$status = $gz->gzseek($offset, $whence) ;
$status = $gz->gzclose() ;
$status = $gz->gzeof() ;
$status = $gz->gzsetparams($level, $strategy) ;
$errstring = $gz->gzerror() ;
$gzerrno
$dest = Compress::Zlib::memGzip($buffer) ;
$dest = Compress::Zlib::memGunzip($buffer) ;
$crc = adler32($buffer [,$crc]) ;
$crc = crc32($buffer [,$crc]) ;
$crc = crc32_combine($crc1, $crc2, $len2);
$adler = adler32_combine($adler1, $adler2, $len2);
my $version = Compress::Raw::Zlib::zlib_version();
Compress::Zlib 模組提供 Perl 介面給 zlib 壓縮函式庫(有關如何取得 zlib 的詳細資訊,請參閱 "AUTHOR")。
Compress::Zlib
模組可分為兩個一般功能區域,即 gzip 檔案的簡單讀取/寫入介面和低階記憶體內壓縮/解壓縮介面。
以下各節將討論這些區域。
Compress::Zlib
版本 2.x 的主要變更在於,它現在不會直接與 zlib 函式庫介接。相反地,它使用 IO::Compress::Gzip
和 IO::Uncompress::Gunzip
模組讀取/寫入 gzip 檔案,並使用 Compress::Raw::Zlib
模組進行一些低階 zlib 存取。
此模組版本 2 提供的介面應與版本 1 完全向下相容。如果您發現預期行為有差異,請聯絡作者(請參閱 "AUTHOR")。請參閱 "GZIP INTERFACE"
隨著 IO::Compress
和 IO::Uncompress
模組的建立,Compress::Zlib
不再規劃任何新功能 - 新模組執行 Compress::Zlib
的所有功能,並提供更多功能。Compress::Zlib
的開發將僅限於修正錯誤。
如果您正在撰寫新程式碼,您應該首先使用其中一個新的 IO::Compress
或 IO::Uncompress
模組。
zlib 中提供許多函式,用於讀取和寫入符合 RFC 1952 的 gzip 檔案。此模組提供大部分函式的介面。
如果您之前使用過 Compress::Zlib
1.x,則已對 gzopen
介面進行下列增強/變更
如果您想要使用 gzopen
開啟 STDIN 或 STDOUT,您現在可以選擇使用特殊檔名 "-
" 作為 \*STDIN
和 \*STDOUT
的同義詞。
在 Compress::Zlib
版本 1.x 中,gzopen
使用 zlib 函式庫開啟基礎檔案。當 Perl 檔案控制代碼傳遞給 gzopen
時,這會讓事情變得特別棘手。在幕後,必須從 Perl 檔案控制代碼中擷取數字 C 檔案描述符,然後傳遞給 zlib 函式庫。
除了無法移植到某些作業系統之外,這使得在需要從較大的檔案中擷取/建立嵌入式 gzip 資料串流,卻又不想重複開啟和關閉檔案的情況下,很難使用 gzopen
。
這也使得無法傳遞未與實際檔案系統檔案關聯的 perl 檔案句柄,例如 IO::String
。
在 Compress::Zlib
版本 2.x 中,gzopen
介面已完全改寫,以使用 IO::Compress::Gzip 來寫入 gzip 檔案,並使用 IO::Uncompress::Gunzip 來讀取 gzip 檔案。上述限制都不適用。
新增 gzseek
以提供受限的 seek
介面。
新增 gztell
。
IO-Compress-Zlib
模組包含更完整且更彈性的介面,用於讀取/寫入 gzip 檔案/緩衝區。請參閱 IO::Compress::Gzip 和 IO::Uncompress::Gunzip 以取得更多詳細資料。
此函式會開啟 gzip 檔案 $filename
以供讀取或寫入,或附加到已開啟的檔案句柄 $filehandle
。如果成功,它會傳回一個物件,如果失敗,則傳回 undef
。
在寫入 gzip 檔案時,此介面永遠會建立最小的 gzip 標頭(剛好 10 個位元組)。如果您想要更進一步控制儲存在 gzip 標頭中的內容(例如原始檔名或註解),請改用 IO::Compress::Gzip。類似地,如果您想要讀取 gzip 標頭的內容,請使用 IO::Uncompress::Gunzip。
第二個參數 $mode
用於指定檔案是開啟供讀取或寫入,以及在寫入時選擇性地指定壓縮層級和壓縮策略。$mode
參數的格式類似於 'C' 函式 fopen
的模式參數,因此「rb」用於開啟供讀取,「wb」用於寫入,「ab」用於附加(寫入檔案的結尾)。
要指定寫入時壓縮等級,在模式字串中附加 0 到 9 之間的數字,0 表示不壓縮,9 表示最大壓縮。如果未指定壓縮等級,將使用 Z_DEFAULT_COMPRESSION。
要指定寫入時壓縮策略,請附加「f」表示已過濾資料、「h」表示僅 Huffman 壓縮,或「R」表示執行長度編碼。如果未指定策略,將使用 Z_DEFAULT_STRATEGY。
因此,例如,「wb9」表示使用預設策略以最大壓縮開啟寫入,而「wb4R」表示使用壓縮等級 4 和執行長度編碼開啟寫入。
請參閱 zlib 文件,了解 $mode
參數的確切格式。
從壓縮檔案讀取 $size
位元組至 $buffer
。如果未指定 $size
,它將預設為 4096。如果純量 $buffer
不夠大,它將自動擴充。
傳回實際讀取的位元組數。在 EOF 時,它傳回 0,在發生錯誤時傳回 -1。
從壓縮檔案讀取下一行至 $line
。
傳回實際讀取的位元組數。在 EOF 時,它傳回 0,在發生錯誤時傳回 -1。
可以將 gzread
和 gzreadline
的呼叫混用。
為了與此模組的 1.x 版維持向後相容性,gzreadline
會忽略 $/
變數,它永遠使用字串 "\n"
作為行分隔符號。
如果您希望一次讀取一個 gzip 檔案的一行,並讓它尊重 $/
變數(或 $INPUT_RECORD_SEPARATOR
,或在使用 English
時的 $RS
),請參閱 IO::Uncompress::Gunzip。
將 $buffer
的內容寫入壓縮檔案。傳回實際寫入的位元組數,或在發生錯誤時傳回 0。
將所有待處理的輸出沖入壓縮檔案。
此方法採用一個可選參數,$flush_type
,用於控制沖刷方式。預設使用的 $flush_type
為 Z_FINISH
。$flush_type
的其他有效值包括 Z_NO_FLUSH
、Z_SYNC_FLUSH
、Z_FULL_FLUSH
和 Z_BLOCK
。強烈建議您只有在完全了解其含義時才設定 flush_type
參數,因為過度使用 flush
會嚴重降低壓縮層級。詳情請參閱 zlib
文件。
成功時傳回 0。
傳回未壓縮的檔案偏移量。
提供 seek
功能的子集,但限制只能在壓縮檔案中向前尋找。嘗試向後尋找會造成致命錯誤。
開啟寫入時,檔案的空白部分會寫入 NULL (0x00) 位元組。
$whence
參數應為 SEEK_SET、SEEK_CUR 或 SEEK_END 之一。
成功時傳回 1,失敗時傳回 0。
關閉壓縮檔案。任何待處理資料都會在檔案關閉前沖刷至檔案。
成功時傳回 0。
變更縮減串流 $gz
的設定。
下列顯示有效選項的清單。未指定的選項將保持不變。
注意:此方法僅在執行 zlib 1.0.6 或更新版本時可用。
傳回與 $gz
關聯的最後一個操作的 zlib 錯誤訊息或數字。在數字脈絡中使用時,傳回值會是 zlib 錯誤數字;在字串脈絡中使用時,傳回值會是 zlib 錯誤訊息。下列顯示的 zlib 錯誤數字常數可供使用。
Z_OK
Z_STREAM_END
Z_ERRNO
Z_STREAM_ERROR
Z_DATA_ERROR
Z_MEM_ERROR
Z_BUF_ERROR
$gzerrno
標量包含與最近的 gzip 常式關聯的錯誤代碼。請注意,與 gzerror()
不同,錯誤並非與特定檔案關聯。
與 gzerror()
一樣,它在數字脈絡中傳回錯誤數字,在字串脈絡中傳回錯誤訊息。但與 gzerror()
不同的是,當錯誤與 zlib 本身關聯時,錯誤訊息會對應到 zlib 訊息;當錯誤與 zlib 無關時,錯誤訊息會對應到 UNIX 錯誤訊息(亦即 zlib 傳回 Z_ERRORNO
)。
由於 zlib 和 UNIX 使用的錯誤數字有重疊,因此 $gzerrno
僅應在數字脈絡中用於檢查是否有錯誤。請使用 gzerror()
檢查特定的 zlib 錯誤。下列的 gzcat 範例顯示如何安全地使用變數。
以下是一個使用介面的範例腳本。它實作一個 gzcat 函式。
use strict ;
use warnings ;
use Compress::Zlib ;
# use stdin if no files supplied
@ARGV = '-' unless @ARGV ;
foreach my $file (@ARGV) {
my $buffer ;
my $gz = gzopen($file, "rb")
or die "Cannot open $file: $gzerrno\n" ;
print $buffer while $gz->gzread($buffer) > 0 ;
die "Error reading from $file: $gzerrno" . ($gzerrno+0) . "\n"
if $gzerrno != Z_STREAM_END ;
$gz->gzclose() ;
}
以下是一個使用 gzreadline
的腳本。它實作一個非常簡單的類似 grep 的腳本。
use strict ;
use warnings ;
use Compress::Zlib ;
die "Usage: gzgrep pattern [file...]\n"
unless @ARGV >= 1;
my $pattern = shift ;
# use stdin if no files supplied
@ARGV = '-' unless @ARGV ;
foreach my $file (@ARGV) {
my $gz = gzopen($file, "rb")
or die "Cannot open $file: $gzerrno\n" ;
while ($gz->gzreadline($_) > 0) {
print if /$pattern/ ;
}
die "Error reading from $file: $gzerrno\n"
if $gzerrno != Z_STREAM_END ;
$gz->gzclose() ;
}
這個腳本,gzstream,執行與上述 gzcat 腳本相反的動作。它從標準輸入讀取資料,並將 gzip 資料串流寫入標準輸出。
use strict ;
use warnings ;
use Compress::Zlib ;
binmode STDOUT; # gzopen only sets it on the fd
my $gz = gzopen(\*STDOUT, "wb")
or die "Cannot open stdout: $gzerrno\n" ;
while (<>) {
$gz->gzwrite($_)
or die "error writing: $gzerrno\n" ;
}
$gz->gzclose ;
這個函式用於建立一個具有最小可能 gzip 標頭(剛好 10 個位元組)的記憶體中 gzip 檔案。
$dest = Compress::Zlib::memGzip($buffer)
or die "Cannot compress: $gzerrno\n";
如果成功,它會傳回記憶體中的 gzip 檔案。否則,它會傳回 undef
,而 $gzerrno
變數會儲存 zlib 錯誤碼。
$buffer
參數可以是純量或純量參考。
請參閱 IO::Compress::Gzip,以取得執行記憶體中 gzip 壓縮的另一種方法。
這個函式用於解壓縮記憶體中的 gzip 檔案。
$dest = Compress::Zlib::memGunzip($buffer)
or die "Cannot uncompress: $gzerrno\n";
如果成功,它會傳回解壓縮的 gzip 檔案。否則,它會傳回 undef
,而 $gzerrno
變數會儲存 zlib 錯誤碼。
$buffer
參數可以是純量或純量參考。呼叫此函式後,$buffer
參數的內容會被銷毀。
如果 $buffer
包含多個串接的 gzip 資料串流,則只會解壓縮第一個。如果你需要處理串接的資料串流,請在 IO::Uncompress::Gunzip
模組中使用具有 MultiStream
選項的 gunzip
。
請參閱 IO::Uncompress::Gunzip,以取得執行記憶體中 gzip 解壓縮的另一種方法。
提供兩個函式來執行 RFC 1950 資料串流的記憶體中壓縮/解壓縮。它們稱為 compress
和 uncompress
。
壓縮 $source
。如果成功,它會傳回壓縮後的資料。否則,它會傳回 undef。
來源緩衝區 $source
可以是純量或純量參考。
$level
參數定義壓縮層級。有效值為 0 到 9,Z_NO_COMPRESSION
、Z_BEST_SPEED
、Z_BEST_COMPRESSION
和 Z_DEFAULT_COMPRESSION
。如果未指定 $level
,將使用 Z_DEFAULT_COMPRESSION
。
解壓縮 $source
。如果成功,它會傳回解壓縮後的資料。否則,它會傳回 undef。
來源緩衝區可以是標量或標量參考。
請注意:以上定義的兩個函數不相容於同名的 Unix 指令。
請參閱此發行版隨附的 IO::Deflate 和 IO::Inflate,以取得用於讀取/寫入 RFC 1950 檔案/緩衝區的替代介面。
此區段定義了一個介面,允許使用 zlib 提供的deflate 介面進行記憶體內壓縮。
以下是可用的介面定義
初始化一個 deflate 串流。
它結合了zlib 函數 deflateInit
、deflateInit2
和 deflateSetDictionary
的功能。
如果成功,它會在清單內容中傳回已初始化的 deflate 串流 $d
和 Z_OK
的 $status
。在標量內容中,它只會傳回 deflate 串流 $d
。
如果沒有成功,傳回的 deflate 串流 ($d
) 將會是未定義,而 $status
會包含確切的zlib 錯誤碼。
此函數可選擇採用多個指定為 -Name=>value
成對的名稱選項。這允許調整個別選項,而無需在參數清單中指定所有選項。
為了向後相容性,也可以將參數傳遞為對包含名稱=>值成對的雜湊的參考。
此函數採用一個可選擇的參數,即對雜湊的參考。雜湊的內容允許調整 deflate 介面。
以下是有效選項清單
定義壓縮層級。有效值為 0 到 9、Z_NO_COMPRESSION
、Z_BEST_SPEED
、Z_BEST_COMPRESSION
和 Z_DEFAULT_COMPRESSION
。
預設值為 Z_DEFAULT_COMPRESSION。
定義壓縮方法。目前唯一有效的數值(也是預設值)為 Z_DEFLATED。
若要建立一個 RFC 1950 資料串流,請將 WindowBits
設定為正數。
若要建立一個 RFC 1951 資料串流,請將 WindowBits
設定為 -MAX_WBITS
。
有關 WindowBits
的意義和有效數值的完整定義,請參閱deflateInit2 的zlib 文件。
預設值為 MAX_WBITS。
有關 MemLevel
的意義和有效值的定義,請參閱 zlib 文件中的 deflateInit2。
預設為 MAX_MEM_LEVEL。
定義用於調整壓縮的策略。有效值為 Z_DEFAULT_STRATEGY
、Z_FILTERED
和 Z_HUFFMAN_ONLY
。
預設為 Z_DEFAULT_STRATEGY。
當指定字典時,Compress::Zlib 會在呼叫 deflateInit
後自動直接呼叫 deflateSetDictionary
。字典的 Adler32 值可透過呼叫方法 $d->dict_adler()
取得。
預設為沒有字典。
設定縮減緩衝區的初始大小。如果必須重新配置緩衝區以增加大小,它會以 Bufsize
的增量成長。
預設為 4096。
以下是使用 deflateInit
選擇性參數清單來覆寫預設緩衝區大小和縮減層級的範例。所有其他選項都採用預設值。
deflateInit( -Bufsize => 300,
-Level => Z_BEST_SPEED ) ;
縮減 $buffer
的內容。緩衝區可以是純量或純量參照。完成後,$buffer
會完全處理完畢(假設沒有錯誤)。如果縮減成功,它會傳回縮減的輸出 $out
和狀態值 $status
為 Z_OK
。
發生錯誤時,$out
會是 undef,而 $status
會包含 zlib 錯誤碼。
在純量內容中,deflate
只會傳回 $out
。
與 zlib 中的 deflate 函數一樣,此方法不一定會產生任何輸出。因此,不要依賴 $out
為空來進行錯誤測試。
通常用於完成縮減。任何待處理的輸出都會透過 $out
傳回。如果成功,$status
會有 Z_OK
的值。
在純量內容中,flush
只會傳回 $out
。
請注意,清除可能會嚴重降低縮減率,因此只應使用它來終止解壓縮(使用 Z_FINISH
)或當您想要建立完全清除點(使用 Z_FULL_FLUSH
)時。
預設使用的 flush_type
為 Z_FINISH
。flush_type
的其他有效值為 Z_NO_FLUSH
、Z_PARTIAL_FLUSH
、Z_SYNC_FLUSH
和 Z_FULL_FLUSH
。強烈建議您只有在完全了解其含義時才設定 flush_type
參數。請參閱 zlib
文件以取得詳細資訊。
變更 deflate 串流 $d
的設定。
下列顯示有效選項的清單。未指定的選項將保持不變。
定義壓縮層級。有效值為 0 到 9、Z_NO_COMPRESSION
、Z_BEST_SPEED
、Z_BEST_COMPRESSION
和 Z_DEFAULT_COMPRESSION
。
定義用於調整壓縮的策略。有效值為 Z_DEFAULT_STRATEGY
、Z_FILTERED
和 Z_HUFFMAN_ONLY
。
傳回字典的 adler32 值。
傳回 zlib 產生的最後一個錯誤訊息。
傳回傳入 deflate 的未壓縮位元組總數。
傳回 deflate 輸出的壓縮位元組總數。
以下是使用 deflate
的簡單範例。它只讀取標準輸入,將其壓縮並寫入標準輸出。
use strict ;
use warnings ;
use Compress::Zlib ;
binmode STDIN;
binmode STDOUT;
my $x = deflateInit()
or die "Cannot create a deflation stream\n" ;
my ($output, $status) ;
while (<>)
{
($output, $status) = $x->deflate($_) ;
$status == Z_OK
or die "deflation failed\n" ;
print $output ;
}
($output, $status) = $x->flush() ;
$status == Z_OK
or die "deflation failed\n" ;
print $output ;
此區段定義可用的介面,允許使用 zlib 提供的 deflate 介面進行記憶體中解壓縮。
以下是介面的定義
初始化一個膨脹串流。
在清單內容中,它會傳回膨脹串流 $i
和 $status
中的 zlib 狀態碼。在純量內容中,它只會傳回膨脹串流。
如果成功,$i
將會包含膨脹串流,而 $status
將會是 Z_OK
。
如果失敗,$i
將會是 undef,而 $status
將會包含 zlib 錯誤碼。
此函數可選擇採用多個指定為 -Name=>value
成對的名稱選項。這允許調整個別選項,而無需在參數清單中指定所有選項。
為了向後相容性,也可以將參數傳遞為對包含名稱=>值成對的雜湊的參考。
此函數採用一個可選擇的參數,即對雜湊的參考。雜湊的內容允許調整 deflate 介面。
以下是有效選項清單
若要解壓縮 RFC 1950 資料串流,請將 WindowBits
設為正數。
若要解壓縮 RFC 1951 資料串流,請將 WindowBits
設為 -MAX_WBITS
。
關於 WindowBits
的意義和有效值的完整定義,請參閱 zlib 文件中的 inflateInit2。
預設值為 MAX_WBITS。
設定膨脹緩衝區的初始大小。如果必須重新配置緩衝區以增加大小,它將以 Bufsize
的增量成長。
預設值為 4096。
預設為沒有字典。
以下為使用 inflateInit
可選參數來覆寫預設緩衝區大小的範例。
inflateInit( -Bufsize => 300 ) ;
膨脹 $buffer
的完整內容。緩衝區可以是標量或標量參考。
如果成功,則傳回 Z_OK
,如果已成功到達壓縮資料的結尾,則傳回 Z_STREAM_END
。如果未成功,則 $out
會是 未定義,而 $status
會包含 zlib 錯誤碼。
inflate
會修改 $buffer
參數。完成時,它將包含膨脹後輸入緩衝區的剩餘部分。這表示當傳回狀態為 Z_OK
時,$buffer
會是空字串。當傳回狀態為 Z_STREAM_END
時,$buffer
參數會包含在壓縮資料串流後儲存在輸入緩衝區中的內容(如果有)。
在處理封裝壓縮資料串流的檔案格式(例如 gzip、zip)時,此功能非常有用。
掃描 $buffer
,直到到達 完整清除點 或緩衝區的結尾。
如果找到 完整清除點,則傳回 Z_OK
,而 $buffer
會移除清除點之前的所有資料。然後可以將其傳遞給 deflate
方法。
任何其他傳回碼表示未找到清除點。如果還有更多資料,則可以重複呼叫 inflateSync
,並提供更多壓縮資料,直到找到清除點。
傳回字典的 adler32 值。
傳回 zlib 產生的最後一個錯誤訊息。
傳回輸入膨脹的壓縮位元組總數。
傳回膨脹輸出的未壓縮位元組總數。
以下為使用 inflate
的範例。
use strict ;
use warnings ;
use Compress::Zlib ;
my $x = inflateInit()
or die "Cannot create a inflation stream\n" ;
my $input = '' ;
binmode STDIN;
binmode STDOUT;
my ($output, $status) ;
while (read(STDIN, $input, 4096))
{
($output, $status) = $x->inflate(\$input) ;
print $output
if $status == Z_OK or $status == Z_STREAM_END ;
last if $status != Z_OK ;
}
die "inflation failed\n"
unless $status == Z_STREAM_END ;
zlib 提供兩個函數來計算檢查總和。對於 Perl 介面,兩個函數中兩個參數的順序已反轉。這允許執行執行中的檢查總和和一次性計算。
$crc = adler32($buffer [,$crc]) ;
$crc = crc32($buffer [,$crc]) ;
緩衝區參數可以是標量或標量參考。
如果 $crc 參數是 undef
,crc 值將會重設。
如果您已經使用 zlib 1.2.3 或更好的版本建置這個模組,將會有兩個額外的 CRC 相關函數可用。
$crc = crc32_combine($crc1, $crc2, $len2);
$adler = adler32_combine($adler1, $adler2, $len2);
這些函數允許合併檢查碼。請參閱 zlib 文件以取得更多詳細資訊。
傳回 zlib 函式庫的版本。
當您使用 Compress::Zlib 時,所有 zlib 常數會自動導入。
一般回饋/問題/錯誤報告應傳送至 https://github.com/pmqs/IO-Compress/issues(優先)或 https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress。
IO::Compress::Gzip、IO::Uncompress::Gunzip、IO::Compress::Deflate、IO::Uncompress::Inflate、IO::Compress::RawDeflate、IO::Uncompress::RawInflate、IO::Compress::Bzip2、IO::Uncompress::Bunzip2、IO::Compress::Lzma、IO::Uncompress::UnLzma、IO::Compress::Xz、IO::Uncompress::UnXz、IO::Compress::Lzip、IO::Uncompress::UnLzip、IO::Compress::Lzop、IO::Uncompress::UnLzop、IO::Compress::Lzf、IO::Uncompress::UnLzf、IO::Compress::Zstd、IO::Uncompress::UnZstd、IO::Uncompress::AnyInflate、IO::Uncompress::AnyUncompress
File::GlobMapper、Archive::Zip、Archive::Tar、IO::Zlib
有關 RFC 1950、1951 和 1952,請參閱 https://datatracker.ietf.org/doc/html/rfc1950、https://datatracker.ietf.org/doc/html/rfc1951 和 https://datatracker.ietf.org/doc/html/rfc1952
zlib 壓縮函式庫是由 Jean-loup Gailly gzip@prep.ai.mit.edu
和 Mark Adler madler@alumni.caltech.edu
編寫的。
zlib 壓縮函式庫的主要網站是 http://www.zlib.org。
zlib-ng 壓縮函式庫的主要網站是 https://github.com/zlib-ng/zlib-ng。
gzip 的主要網站是 http://www.gzip.org。
此模組由 Paul Marquess 編寫,pmqs@cpan.org
。
請參閱 Changes 檔案。
版權所有 (c) 1995-2023 Paul Marquess。保留所有權利。
此程式為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。