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
为 Compress::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
使用。
创建一个 IO::Zlib
对象。如果它接收任何参数,则将它们传递给 open
方法;如果打开失败,则销毁该对象。否则,将其返回给调用方。
open
接受两个参数。第一个是要打开的文件的名称,第二个是打开模式。该模式可以是 Compress::Zlib 接受的任何内容,并且可以扩展为 zlib 接受的任何内容(基本上意味着 POSIX fopen() 样式模式字符串加上一个可选数字来指示压缩级别)。
如果该对象当前引用一个打开的文件,则返回 true。
关闭与该对象关联的文件,并将文件与句柄分离。在销毁时自动完成。
返回文件中的下一个字符,如果没有字符,则返回 undef。
返回文件中的下一行,在字符串末尾返回 undef。可以在数组上下文中安全地调用。当前忽略 $/ ($INPUT_RECORD_SEPARATOR 或 $RS 当 English 正在使用时) 并将行视为以 "\n" 分隔。
获取文件中所有剩余的行。如果在标量上下文中意外调用,它将 croak()。
将 ARGS 打印到文件。
从文件中读取一些字节。返回实际读取的字节数,文件末尾返回 0,错误返回 undef。
如果句柄当前位于文件末尾,则返回 true。
在流中搜索到给定位置。尚未支持。
返回流中的当前位置,作为数字偏移量。尚未支持。
使用 getpos()
返回的不透明值设置当前位置。尚未支持。
返回字符串中的当前位置,作为不透明对象。尚未支持。
如果使用外部 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
,并且读取打开必须以管道符号结尾,写入打开必须以管道符号开头。
如果 Compress::Zlib
可用,则返回 true。请注意,这并不意味着正在使用 Compress::Zlib
:请参阅 "gzip_external" 和 gzip_used。
如果 Compress::Zlib
不可用,则为 undef,表示可以使用外部 gzip(请参阅 "has_Compress_Zlib"),如果显式使用外部 gzip,则为 true,如果必须不使用外部 gzip,则为 false。请参阅 "gzip_used"。
如果正在使用外部 gzip,则为 true,否则为 false。
返回用于使用外部 gzip 打开文件以进行读取的“command”。
返回用于使用外部 gzip 打开文件以进行写入的“command”。
如果您想读取行,则必须在列表上下文中读取。
仅使用模式“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
。根据您的操作系统 shell 语法,输出重定向 (>) 通常也是一个好主意。请参阅 "使用外部 GZIP"。
鉴于我们未能加载 Compress::Zlib
并且禁用了使用外部 gzip,IO::Zlib 几乎没有机会正常工作。
没有文件名,无法打开。
我们必须知道要读取多少内容。
LENGTH 必须小于或等于缓冲区大小。
perlfunc,"I/O 运算符" 在 perlop 中,IO::Handle,Compress::Zlib
由 Tom Hughes <[email protected]> 创建。
外部 gzip 支持由 Jarkko Hietaniemi <[email protected]> 添加。
版权所有 (c) 1998-2004 Tom Hughes <[email protected]>。保留所有权利。本程序是自由软件;您可以在与 Perl 本身相同的条款下重新分发和/或修改它。