内容

名称

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::ZlibCompress::Zlib 提供了 IO:: 风格接口,因此也为 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 方法;如果打开失败,则销毁该对象。否则,将其返回给调用方。

OBJECT METHODS

open ( FILENAME, MODE )

open 接受两个参数。第一个是要打开的文件的名称,第二个是打开模式。该模式可以是 Compress::Zlib 接受的任何内容,并且可以扩展为 zlib 接受的任何内容(基本上意味着 POSIX fopen() 样式模式字符串加上一个可选数字来指示压缩级别)。

opened

如果该对象当前引用一个打开的文件,则返回 true。

close

关闭与该对象关联的文件,并将文件与句柄分离。在销毁时自动完成。

getc

返回文件中的下一个字符,如果没有字符,则返回 undef。

getline

返回文件中的下一行,在字符串末尾返回 undef。可以在数组上下文中安全地调用。当前忽略 $/ ($INPUT_RECORD_SEPARATOR 或 $RS 当 English 正在使用时) 并将行视为以 "\n" 分隔。

getlines

获取文件中所有剩余的行。如果在标量上下文中意外调用,它将 croak()。

将 ARGS 打印到文件。

read ( BUF, NBYTES, [OFFSET] )

从文件中读取一些字节。返回实际读取的字节数,文件末尾返回 0,错误返回 undef。

eof

如果句柄当前位于文件末尾,则返回 true。

seek ( OFFSET, WHENCE )

在流中搜索到给定位置。尚未支持。

tell

返回流中的当前位置,作为数字偏移量。尚未支持。

setpos ( POS )

使用 getpos() 返回的不透明值设置当前位置。尚未支持。

getpos ( POS )

返回字符串中的当前位置,作为不透明对象。尚未支持。

USING THE EXTERNAL GZIP

如果使用外部 gzip,则使用以下 open

open(FH, "gzip -dc $filename |")  # for read opens
open(FH, " | gzip > $filename")   # for write opens

您可以修改“commands”,例如通过以下方式硬编码绝对路径:

use IO::Zlib ':gzip_read_open'  => '/some/where/gunzip -c %s |';
use IO::Zlib ':gzip_write_open' => '| /some/where/gzip.exe > %s';

%s 将扩展为文件名(使用 sprintf,因此请注意转义任何其他 % 符号)。“commands”将经过完整性检查 - 它们必须包含 %s,并且读取打开必须以管道符号结尾,写入打开必须以管道符号开头。

类方法

has_Compress_Zlib

如果 Compress::Zlib 可用,则返回 true。请注意,这并不意味着正在使用 Compress::Zlib:请参阅 "gzip_external"gzip_used

gzip_external

如果 Compress::Zlib 不可用,则为 undef,表示可以使用外部 gzip(请参阅 "has_Compress_Zlib"),如果显式使用外部 gzip,则为 true,如果必须不使用外部 gzip,则为 false。请参阅 "gzip_used"

gzip_used

如果正在使用外部 gzip,则为 true,否则为 false。

gzip_read_open

返回用于使用外部 gzip 打开文件以进行读取的“command”。

gzip_write_open

返回用于使用外部 gzip 打开文件以进行写入的“command”。

诊断

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。根据您的操作系统 shell 语法,输出重定向 (>) 通常也是一个好主意。请参阅 "使用外部 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"I/O 运算符" 在 perlop 中IO::HandleCompress::Zlib

历史

由 Tom Hughes <[email protected]> 创建。

外部 gzip 支持由 Jarkko Hietaniemi <[email protected]> 添加。

版权

版权所有 (c) 1998-2004 Tom Hughes <[email protected]>。保留所有权利。本程序是自由软件;您可以在与 Perl 本身相同的条款下重新分发和/或修改它。