diff options
Diffstat (limited to 'upstream/debian-unstable/man3/IO::Compress::Zip.3perl')
-rw-r--r-- | upstream/debian-unstable/man3/IO::Compress::Zip.3perl | 1319 |
1 files changed, 1319 insertions, 0 deletions
diff --git a/upstream/debian-unstable/man3/IO::Compress::Zip.3perl b/upstream/debian-unstable/man3/IO::Compress::Zip.3perl new file mode 100644 index 00000000..2815ec5d --- /dev/null +++ b/upstream/debian-unstable/man3/IO::Compress::Zip.3perl @@ -0,0 +1,1319 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" ======================================================================== +.\" +.IX Title "IO::Compress::Zip 3perl" +.TH IO::Compress::Zip 3perl 2024-01-12 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH NAME +IO::Compress::Zip \- Write zip files/buffers +.SH SYNOPSIS +.IX Header "SYNOPSIS" +.Vb 1 +\& use IO::Compress::Zip qw(zip $ZipError) ; +\& +\& my $status = zip $input => $output [,OPTS] +\& or die "zip failed: $ZipError\en"; +\& +\& my $z = IO::Compress::Zip\->new( $output [,OPTS] ) +\& or die "zip failed: $ZipError\en"; +\& +\& $z\->print($string); +\& $z\->printf($format, $string); +\& $z\->write($string); +\& $z\->syswrite($string [, $length, $offset]); +\& $z\->flush(); +\& $z\->tell(); +\& $z\->eof(); +\& $z\->seek($position, $whence); +\& $z\->binmode(); +\& $z\->fileno(); +\& $z\->opened(); +\& $z\->autoflush(); +\& $z\->input_line_number(); +\& $z\->newStream( [OPTS] ); +\& +\& $z\->deflateParams(); +\& +\& $z\->close() ; +\& +\& $ZipError ; +\& +\& # IO::File mode +\& +\& print $z $string; +\& printf $z $format, $string; +\& tell $z +\& eof $z +\& seek $z, $position, $whence +\& binmode $z +\& fileno $z +\& close $z ; +.Ve +.SH DESCRIPTION +.IX Header "DESCRIPTION" +This module provides a Perl interface that allows writing zip +compressed data to files or buffer. +.PP +The primary purpose of this module is to provide streaming write access to +zip files and buffers. +.PP +At present the following compression methods are supported by IO::Compress::Zip +.IP "Store (0)" 5 +.IX Item "Store (0)" +.PD 0 +.IP "Deflate (8)" 5 +.IX Item "Deflate (8)" +.IP "Bzip2 (12)" 5 +.IX Item "Bzip2 (12)" +.PD +To write Bzip2 content, the module \f(CW\*(C`IO::Uncompress::Bunzip2\*(C'\fR must +be installed. +.IP "Lzma (14)" 5 +.IX Item "Lzma (14)" +To write LZMA content, the module \f(CW\*(C`IO::Uncompress::UnLzma\*(C'\fR must +be installed. +.IP "Zstandard (93)" 5 +.IX Item "Zstandard (93)" +To write Zstandard content, the module \f(CW\*(C`IO::Compress::Zstd\*(C'\fR must +be installed. +.IP "Xz (95)" 5 +.IX Item "Xz (95)" +To write Xz content, the module \f(CW\*(C`IO::Uncompress::UnXz\*(C'\fR must +be installed. +.PP +For reading zip files/buffers, see the companion module +IO::Uncompress::Unzip. +.SH "Functional Interface" +.IX Header "Functional Interface" +A top-level function, \f(CW\*(C`zip\*(C'\fR, is provided to carry out +"one-shot" compression between buffers and/or files. For finer +control over the compression process, see the "OO Interface" +section. +.PP +.Vb 1 +\& use IO::Compress::Zip qw(zip $ZipError) ; +\& +\& zip $input_filename_or_reference => $output_filename_or_reference [,OPTS] +\& or die "zip failed: $ZipError\en"; +.Ve +.PP +The functional interface needs Perl5.005 or better. +.ie n .SS "zip $input_filename_or_reference => $output_filename_or_reference [, OPTS]" +.el .SS "zip \f(CW$input_filename_or_reference\fP => \f(CW$output_filename_or_reference\fP [, OPTS]" +.IX Subsection "zip $input_filename_or_reference => $output_filename_or_reference [, OPTS]" +\&\f(CW\*(C`zip\*(C'\fR expects at least two parameters, +\&\f(CW$input_filename_or_reference\fR and \f(CW$output_filename_or_reference\fR +and zero or more optional parameters (see "Optional Parameters") +.PP +\fIThe \fR\f(CI$input_filename_or_reference\fR\fI parameter\fR +.IX Subsection "The $input_filename_or_reference parameter" +.PP +The parameter, \f(CW$input_filename_or_reference\fR, is used to define the +source of the uncompressed data. +.PP +It can take one of the following forms: +.IP "A filename" 5 +.IX Item "A filename" +If the \f(CW$input_filename_or_reference\fR parameter is a simple scalar, it is +assumed to be a filename. This file will be opened for reading and the +input data will be read from it. +.IP "A filehandle" 5 +.IX Item "A filehandle" +If the \f(CW$input_filename_or_reference\fR parameter is a filehandle, the input +data will be read from it. The string '\-' can be used as an alias for +standard input. +.IP "A scalar reference" 5 +.IX Item "A scalar reference" +If \f(CW$input_filename_or_reference\fR is a scalar reference, the input data +will be read from \f(CW$$input_filename_or_reference\fR. +.IP "An array reference" 5 +.IX Item "An array reference" +If \f(CW$input_filename_or_reference\fR is an array reference, each element in +the array must be a filename. +.Sp +The input data will be read from each file in turn. +.Sp +The complete array will be walked to ensure that it only +contains valid filenames before any data is compressed. +.IP "An Input FileGlob string" 5 +.IX Item "An Input FileGlob string" +If \f(CW$input_filename_or_reference\fR is a string that is delimited by the +characters "<" and ">" \f(CW\*(C`zip\*(C'\fR will assume that it is an +\&\fIinput fileglob string\fR. The input is the list of files that match the +fileglob. +.Sp +See File::GlobMapper for more details. +.PP +If the \f(CW$input_filename_or_reference\fR parameter is any other type, +\&\f(CW\*(C`undef\*(C'\fR will be returned. +.PP +In addition, if \f(CW$input_filename_or_reference\fR corresponds to a filename +from the filesystem, a number of zip file header fields will be populated by default +using the following attributes from the input file +.IP \(bu 5 +the full filename contained in \f(CW$input_filename_or_reference\fR +.IP \(bu 5 +the file protection attributes +.IP \(bu 5 +the UID/GID for the file +.IP \(bu 5 +the file timestamps +.PP +If you do not want to use these defaults they can be overridden by +explicitly setting one, or more, of the \f(CW\*(C`Name\*(C'\fR, \f(CW\*(C`Time\*(C'\fR, \f(CW\*(C`TextFlag\*(C'\fR, \f(CW\*(C`ExtAttr\*(C'\fR, \f(CW\*(C`exUnixN\*(C'\fR and \f(CW\*(C`exTime\*(C'\fR options or by setting the +\&\f(CW\*(C`Minimal\*(C'\fR parameter. +.PP +\fIThe \fR\f(CI$output_filename_or_reference\fR\fI parameter\fR +.IX Subsection "The $output_filename_or_reference parameter" +.PP +The parameter \f(CW$output_filename_or_reference\fR is used to control the +destination of the compressed data. This parameter can take one of +these forms. +.IP "A filename" 5 +.IX Item "A filename" +If the \f(CW$output_filename_or_reference\fR parameter is a simple scalar, it is +assumed to be a filename. This file will be opened for writing and the +compressed data will be written to it. +.IP "A filehandle" 5 +.IX Item "A filehandle" +If the \f(CW$output_filename_or_reference\fR parameter is a filehandle, the +compressed data will be written to it. The string '\-' can be used as +an alias for standard output. +.IP "A scalar reference" 5 +.IX Item "A scalar reference" +If \f(CW$output_filename_or_reference\fR is a scalar reference, the +compressed data will be stored in \f(CW$$output_filename_or_reference\fR. +.IP "An Array Reference" 5 +.IX Item "An Array Reference" +If \f(CW$output_filename_or_reference\fR is an array reference, +the compressed data will be pushed onto the array. +.IP "An Output FileGlob" 5 +.IX Item "An Output FileGlob" +If \f(CW$output_filename_or_reference\fR is a string that is delimited by the +characters "<" and ">" \f(CW\*(C`zip\*(C'\fR will assume that it is an +\&\fIoutput fileglob string\fR. The output is the list of files that match the +fileglob. +.Sp +When \f(CW$output_filename_or_reference\fR is an fileglob string, +\&\f(CW$input_filename_or_reference\fR must also be a fileglob string. Anything +else is an error. +.Sp +See File::GlobMapper for more details. +.PP +If the \f(CW$output_filename_or_reference\fR parameter is any other type, +\&\f(CW\*(C`undef\*(C'\fR will be returned. +.SS Notes +.IX Subsection "Notes" +When \f(CW$input_filename_or_reference\fR maps to multiple files/buffers and +\&\f(CW$output_filename_or_reference\fR is a single +file/buffer the input files/buffers will each be stored +in \f(CW$output_filename_or_reference\fR as a distinct entry. +.SS "Optional Parameters" +.IX Subsection "Optional Parameters" +The optional parameters for the one-shot function \f(CW\*(C`zip\*(C'\fR +are (for the most part) identical to those used with the OO interface defined in the +"Constructor Options" section. The exceptions are listed below +.ie n .IP """AutoClose => 0|1""" 5 +.el .IP "\f(CWAutoClose => 0|1\fR" 5 +.IX Item "AutoClose => 0|1" +This option applies to any input or output data streams to +\&\f(CW\*(C`zip\*(C'\fR that are filehandles. +.Sp +If \f(CW\*(C`AutoClose\*(C'\fR is specified, and the value is true, it will result in all +input and/or output filehandles being closed once \f(CW\*(C`zip\*(C'\fR has +completed. +.Sp +This parameter defaults to 0. +.ie n .IP """BinModeIn => 0|1""" 5 +.el .IP "\f(CWBinModeIn => 0|1\fR" 5 +.IX Item "BinModeIn => 0|1" +This option is now a no-op. All files will be read in binmode. +.ie n .IP """Append => 0|1""" 5 +.el .IP "\f(CWAppend => 0|1\fR" 5 +.IX Item "Append => 0|1" +The behaviour of this option is dependent on the type of output data +stream. +.RS 5 +.IP \(bu 5 +A Buffer +.Sp +If \f(CW\*(C`Append\*(C'\fR is enabled, all compressed data will be append to the end of +the output buffer. Otherwise the output buffer will be cleared before any +compressed data is written to it. +.IP \(bu 5 +A Filename +.Sp +If \f(CW\*(C`Append\*(C'\fR is enabled, the file will be opened in append mode. Otherwise +the contents of the file, if any, will be truncated before any compressed +data is written to it. +.IP \(bu 5 +A Filehandle +.Sp +If \f(CW\*(C`Append\*(C'\fR is enabled, the filehandle will be positioned to the end of +the file via a call to \f(CW\*(C`seek\*(C'\fR before any compressed data is +written to it. Otherwise the file pointer will not be moved. +.RE +.RS 5 +.Sp +When \f(CW\*(C`Append\*(C'\fR is specified, and set to true, it will \fIappend\fR all compressed +data to the output data stream. +.Sp +So when the output is a filehandle it will carry out a seek to the eof +before writing any compressed data. If the output is a filename, it will be opened for +appending. If the output is a buffer, all compressed data will be +appended to the existing buffer. +.Sp +Conversely when \f(CW\*(C`Append\*(C'\fR is not specified, or it is present and is set to +false, it will operate as follows. +.Sp +When the output is a filename, it will truncate the contents of the file +before writing any compressed data. If the output is a filehandle +its position will not be changed. If the output is a buffer, it will be +wiped before any compressed data is output. +.Sp +Defaults to 0. +.RE +.SS Examples +.IX Subsection "Examples" +Here are a few example that show the capabilities of the module. +.PP +\fIStreaming\fR +.IX Subsection "Streaming" +.PP +This very simple command line example demonstrates the streaming capabilities of the module. +The code reads data from STDIN, compresses it, and writes the compressed data to STDOUT. +.PP +.Vb 1 +\& $ echo hello world | perl \-MIO::Compress::Zip=zip \-e \*(Aqzip \e*STDIN => \e*STDOUT\*(Aq >output.zip +.Ve +.PP +The special filename "\-" can be used as a standin for both \f(CW\*(C`\e*STDIN\*(C'\fR and \f(CW\*(C`\e*STDOUT\*(C'\fR, +so the above can be rewritten as +.PP +.Vb 1 +\& $ echo hello world | perl \-MIO::Compress::Zip=zip \-e \*(Aqzip "\-" => "\-"\*(Aq >output.zip +.Ve +.PP +One problem with creating a zip archive directly from STDIN can be demonstrated by looking at +the contents of the zip file, output.zip, that we have just created. +.PP +.Vb 7 +\& $ unzip \-l output.zip +\& Archive: output.zip +\& Length Date Time Name +\& \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\- \-\-\-\- +\& 12 2019\-08\-16 22:21 +\& \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\- +\& 12 1 file +.Ve +.PP +The archive member (filename) used is the empty string. +.PP +If that doesn't suit your needs, you can explicitly set the filename used +in the zip archive by specifying the Name option, like so +.PP +.Vb 1 +\& echo hello world | perl \-MIO::Compress::Zip=zip \-e \*(Aqzip "\-" => "\-", Name => "hello.txt"\*(Aq >output.zip +.Ve +.PP +Now the contents of the zip file looks like this +.PP +.Vb 7 +\& $ unzip \-l output.zip +\& Archive: output.zip +\& Length Date Time Name +\& \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\- \-\-\-\- +\& 12 2019\-08\-16 22:22 hello.txt +\& \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\- +\& 12 1 file +.Ve +.PP +\fICompressing a file from the filesystem\fR +.IX Subsection "Compressing a file from the filesystem" +.PP +To read the contents of the file \f(CW\*(C`file1.txt\*(C'\fR and write the compressed +data to the file \f(CW\*(C`file1.txt.zip\*(C'\fR. +.PP +.Vb 3 +\& use strict ; +\& use warnings ; +\& use IO::Compress::Zip qw(zip $ZipError) ; +\& +\& my $input = "file1.txt"; +\& zip $input => "$input.zip" +\& or die "zip failed: $ZipError\en"; +.Ve +.PP +\fIReading from a Filehandle and writing to an in-memory buffer\fR +.IX Subsection "Reading from a Filehandle and writing to an in-memory buffer" +.PP +To read from an existing Perl filehandle, \f(CW$input\fR, and write the +compressed data to a buffer, \f(CW$buffer\fR. +.PP +.Vb 4 +\& use strict ; +\& use warnings ; +\& use IO::Compress::Zip qw(zip $ZipError) ; +\& use IO::File ; +\& +\& my $input = IO::File\->new( "<file1.txt" ) +\& or die "Cannot open \*(Aqfile1.txt\*(Aq: $!\en" ; +\& my $buffer ; +\& zip $input => \e$buffer +\& or die "zip failed: $ZipError\en"; +.Ve +.PP +\fICompressing multiple files\fR +.IX Subsection "Compressing multiple files" +.PP +To create a zip file, \f(CW\*(C`output.zip\*(C'\fR, that contains the compressed contents +of the files \f(CW\*(C`alpha.txt\*(C'\fR and \f(CW\*(C`beta.txt\*(C'\fR +.PP +.Vb 3 +\& use strict ; +\& use warnings ; +\& use IO::Compress::Zip qw(zip $ZipError) ; +\& +\& zip [ \*(Aqalpha.txt\*(Aq, \*(Aqbeta.txt\*(Aq ] => \*(Aqoutput.zip\*(Aq +\& or die "zip failed: $ZipError\en"; +.Ve +.PP +Alternatively, rather than having to explicitly name each of the files that +you want to compress, you could use a fileglob to select all the \f(CW\*(C`txt\*(C'\fR +files in the current directory, as follows +.PP +.Vb 3 +\& use strict ; +\& use warnings ; +\& use IO::Compress::Zip qw(zip $ZipError) ; +\& +\& my @files = <*.txt>; +\& zip \e@files => \*(Aqoutput.zip\*(Aq +\& or die "zip failed: $ZipError\en"; +.Ve +.PP +or more succinctly +.PP +.Vb 2 +\& zip [ <*.txt> ] => \*(Aqoutput.zip\*(Aq +\& or die "zip failed: $ZipError\en"; +.Ve +.SH "OO Interface" +.IX Header "OO Interface" +.SS Constructor +.IX Subsection "Constructor" +The format of the constructor for \f(CW\*(C`IO::Compress::Zip\*(C'\fR is shown below +.PP +.Vb 2 +\& my $z = IO::Compress::Zip\->new( $output [,OPTS] ) +\& or die "IO::Compress::Zip failed: $ZipError\en"; +.Ve +.PP +It returns an \f(CW\*(C`IO::Compress::Zip\*(C'\fR object on success and undef on failure. +The variable \f(CW$ZipError\fR will contain an error message on failure. +.PP +If you are running Perl 5.005 or better the object, \f(CW$z\fR, returned from +IO::Compress::Zip can be used exactly like an IO::File filehandle. +This means that all normal output file operations can be carried out +with \f(CW$z\fR. +For example, to write to a compressed file/buffer you can use either of +these forms +.PP +.Vb 2 +\& $z\->print("hello world\en"); +\& print $z "hello world\en"; +.Ve +.PP +The mandatory parameter \f(CW$output\fR is used to control the destination +of the compressed data. This parameter can take one of these forms. +.IP "A filename" 5 +.IX Item "A filename" +If the \f(CW$output\fR parameter is a simple scalar, it is assumed to be a +filename. This file will be opened for writing and the compressed data +will be written to it. +.IP "A filehandle" 5 +.IX Item "A filehandle" +If the \f(CW$output\fR parameter is a filehandle, the compressed data will be +written to it. +The string '\-' can be used as an alias for standard output. +.IP "A scalar reference" 5 +.IX Item "A scalar reference" +If \f(CW$output\fR is a scalar reference, the compressed data will be stored +in \f(CW$$output\fR. +.PP +If the \f(CW$output\fR parameter is any other type, \f(CW\*(C`IO::Compress::Zip\*(C'\fR::new will +return undef. +.SS "Constructor Options" +.IX Subsection "Constructor Options" +\&\f(CW\*(C`OPTS\*(C'\fR is any combination of zero or more the following options: +.ie n .IP """AutoClose => 0|1""" 5 +.el .IP "\f(CWAutoClose => 0|1\fR" 5 +.IX Item "AutoClose => 0|1" +This option is only valid when the \f(CW$output\fR parameter is a filehandle. If +specified, and the value is true, it will result in the \f(CW$output\fR being +closed once either the \f(CW\*(C`close\*(C'\fR method is called or the \f(CW\*(C`IO::Compress::Zip\*(C'\fR +object is destroyed. +.Sp +This parameter defaults to 0. +.ie n .IP """Append => 0|1""" 5 +.el .IP "\f(CWAppend => 0|1\fR" 5 +.IX Item "Append => 0|1" +Opens \f(CW$output\fR in append mode. +.Sp +The behaviour of this option is dependent on the type of \f(CW$output\fR. +.RS 5 +.IP \(bu 5 +A Buffer +.Sp +If \f(CW$output\fR is a buffer and \f(CW\*(C`Append\*(C'\fR is enabled, all compressed data +will be append to the end of \f(CW$output\fR. Otherwise \f(CW$output\fR will be +cleared before any data is written to it. +.IP \(bu 5 +A Filename +.Sp +If \f(CW$output\fR is a filename and \f(CW\*(C`Append\*(C'\fR is enabled, the file will be +opened in append mode. Otherwise the contents of the file, if any, will be +truncated before any compressed data is written to it. +.IP \(bu 5 +A Filehandle +.Sp +If \f(CW$output\fR is a filehandle, the file pointer will be positioned to the +end of the file via a call to \f(CW\*(C`seek\*(C'\fR before any compressed data is written +to it. Otherwise the file pointer will not be moved. +.RE +.RS 5 +.Sp +This parameter defaults to 0. +.RE +.PP +\fIFile Naming Options\fR +.IX Subsection "File Naming Options" +.PP +A quick bit of zip file terminology \-\- A zip archive consists of one or more \fIarchive members\fR, where each member has an associated +filename, known as the \fIarchive member name\fR. +.PP +The options listed in this section control how the \fIarchive member name\fR (or filename) is stored the zip archive. +.ie n .IP """Name => $string""" 5 +.el .IP "\f(CWName => $string\fR" 5 +.IX Item "Name => $string" +This option is used to explicitly set the \fIarchive member name\fR in +the zip archive to \f(CW$string\fR. +Most of the time you don't need to make use of this option. +By default when adding a filename to the zip archive, the \fIarchive member name\fR will match the filename. +.Sp +You should only need to use this option if you want the \fIarchive member name\fR +to be different from the uncompressed filename or when the input is a filehandle or a buffer. +.Sp +The default behaviour for what \fIarchive member name\fR is used when the \f(CW\*(C`Name\*(C'\fR option +is \fInot\fR specified depends on the form of the \f(CW$input\fR parameter: +.RS 5 +.IP \(bu 5 +If the \f(CW$input\fR parameter is a filename, the +value of \f(CW$input\fR will be used for the \fIarchive member name\fR . +.IP \(bu 5 +If the \f(CW$input\fR parameter is not a filename, +the \fIarchive member name\fR will be an empty string. +.RE +.RS 5 +.Sp +Note that both the \f(CW\*(C`CanonicalName\*(C'\fR and \f(CW\*(C`FilterName\*(C'\fR options +can modify the value used for the \fIarchive member name\fR. +.Sp +Also note that you should set the \f(CW\*(C`Efs\*(C'\fR option to true if you are working +with UTF8 filenames. +.RE +.ie n .IP """CanonicalName => 0|1""" 5 +.el .IP "\f(CWCanonicalName => 0|1\fR" 5 +.IX Item "CanonicalName => 0|1" +This option controls whether the \fIarchive member name\fR is +\&\fInormalized\fR into Unix format before being written to the zip file. +.Sp +It is recommended that you enable this option unless you really need +to create a non-standard Zip file. +.Sp +This is what APPNOTE.TXT has to say on what should be stored in the zip +filename header field. +.Sp +.Vb 6 +\& The name of the file, with optional relative path. +\& The path stored should not contain a drive or +\& device letter, or a leading slash. All slashes +\& should be forward slashes \*(Aq/\*(Aq as opposed to +\& backwards slashes \*(Aq\e\*(Aq for compatibility with Amiga +\& and UNIX file systems etc. +.Ve +.Sp +This option defaults to \fBfalse\fR. +.ie n .IP """FilterName => sub { ... }""" 5 +.el .IP "\f(CWFilterName => sub { ... }\fR" 5 +.IX Item "FilterName => sub { ... }" +This option allow the \fIarchive member\fR name to be modified +before it is written to the zip file. +.Sp +This option takes a parameter that must be a reference to a sub. On entry +to the sub the \f(CW$_\fR variable will contain the name to be filtered. If no +filename is available \f(CW$_\fR will contain an empty string. +.Sp +The value of \f(CW$_\fR when the sub returns will be used as the \fIarchive member name\fR. +.Sp +Note that if \f(CW\*(C`CanonicalName\*(C'\fR is enabled, a +normalized filename will be passed to the sub. +.Sp +If you use \f(CW\*(C`FilterName\*(C'\fR to modify the filename, it is your responsibility +to keep the filename in Unix format. +.Sp +Although this option can be used with the OO interface, it is of most use +with the one-shot interface. For example, the code below shows how +\&\f(CW\*(C`FilterName\*(C'\fR can be used to remove the path component from a series of +filenames before they are stored in \f(CW$zipfile\fR. +.Sp +.Vb 4 +\& sub compressTxtFiles +\& { +\& my $zipfile = shift ; +\& my $dir = shift ; +\& +\& zip [ <$dir/*.txt> ] => $zipfile, +\& FilterName => sub { s[^$dir/][] } ; +\& } +.Ve +.ie n .IP """Efs => 0|1""" 5 +.el .IP "\f(CWEfs => 0|1\fR" 5 +.IX Item "Efs => 0|1" +This option controls setting of the "Language Encoding Flag" (EFS) in the zip +archive. When set, the filename and comment fields for the zip archive MUST +be valid UTF\-8. +.Sp +If the string used for the filename and/or comment is not valid UTF\-8 when this option +is true, the script will die with a "wide character" error. +.Sp +Note that this option only works with Perl 5.8.4 or better. +.Sp +This option defaults to \fBfalse\fR. +.PP +\fIOverall Zip Archive Structure\fR +.IX Subsection "Overall Zip Archive Structure" +.ie n .IP """Minimal => 1|0""" 5 +.el .IP "\f(CWMinimal => 1|0\fR" 5 +.IX Item "Minimal => 1|0" +If specified, this option will disable the creation of all extra fields +in the zip local and central headers. So the \f(CW\*(C`exTime\*(C'\fR, \f(CW\*(C`exUnix2\*(C'\fR, +\&\f(CW\*(C`exUnixN\*(C'\fR, \f(CW\*(C`ExtraFieldLocal\*(C'\fR and \f(CW\*(C`ExtraFieldCentral\*(C'\fR options will +be ignored. +.Sp +This parameter defaults to 0. +.ie n .IP """Stream => 0|1""" 5 +.el .IP "\f(CWStream => 0|1\fR" 5 +.IX Item "Stream => 0|1" +This option controls whether the zip file/buffer output is created in +streaming mode. +.Sp +Note that when outputting to a file with streaming mode disabled (\f(CW\*(C`Stream\*(C'\fR +is 0), the output file must be seekable. +.Sp +The default is 1. +.ie n .IP """Zip64 => 0|1""" 5 +.el .IP "\f(CWZip64 => 0|1\fR" 5 +.IX Item "Zip64 => 0|1" +Create a Zip64 zip file/buffer. This option is used if you want +to store files larger than 4 Gig or store more than 64K files in a single +zip archive. +.Sp +\&\f(CW\*(C`Zip64\*(C'\fR will be automatically set, as needed, if working with the one-shot +interface when the input is either a filename or a scalar reference. +.Sp +If you intend to manipulate the Zip64 zip files created with this module +using an external zip/unzip, make sure that it supports Zip64. +.Sp +In particular, if you are using Info-Zip you need to have zip version 3.x +or better to update a Zip64 archive and unzip version 6.x to read a zip64 +archive. +.Sp +The default is 0. +.PP +\fIDeflate Compression Options\fR +.IX Subsection "Deflate Compression Options" +.IP \-Level 5 +.IX Item "-Level" +Defines the compression level used by zlib. The value should either be +a number between 0 and 9 (0 means no compression and 9 is maximum +compression), or one of the symbolic constants defined below. +.Sp +.Vb 4 +\& Z_NO_COMPRESSION +\& Z_BEST_SPEED +\& Z_BEST_COMPRESSION +\& Z_DEFAULT_COMPRESSION +.Ve +.Sp +The default is Z_DEFAULT_COMPRESSION. +.Sp +Note, these constants are not imported by \f(CW\*(C`IO::Compress::Zip\*(C'\fR by default. +.Sp +.Vb 3 +\& use IO::Compress::Zip qw(:strategy); +\& use IO::Compress::Zip qw(:constants); +\& use IO::Compress::Zip qw(:all); +.Ve +.IP \-Strategy 5 +.IX Item "-Strategy" +Defines the strategy used to tune the compression. Use one of the symbolic +constants defined below. +.Sp +.Vb 5 +\& Z_FILTERED +\& Z_HUFFMAN_ONLY +\& Z_RLE +\& Z_FIXED +\& Z_DEFAULT_STRATEGY +.Ve +.Sp +The default is Z_DEFAULT_STRATEGY. +.PP +\fIBzip2 Compression Options\fR +.IX Subsection "Bzip2 Compression Options" +.ie n .IP """BlockSize100K => number""" 5 +.el .IP "\f(CWBlockSize100K => number\fR" 5 +.IX Item "BlockSize100K => number" +Specify the number of 100K blocks bzip2 uses during compression. +.Sp +Valid values are from 1 to 9, where 9 is best compression. +.Sp +This option is only valid if the \f(CW\*(C`Method\*(C'\fR is ZIP_CM_BZIP2. It is ignored +otherwise. +.Sp +The default is 1. +.ie n .IP """WorkFactor => number""" 5 +.el .IP "\f(CWWorkFactor => number\fR" 5 +.IX Item "WorkFactor => number" +Specifies how much effort bzip2 should take before resorting to a slower +fallback compression algorithm. +.Sp +Valid values range from 0 to 250, where 0 means use the default value 30. +.Sp +This option is only valid if the \f(CW\*(C`Method\*(C'\fR is ZIP_CM_BZIP2. It is ignored +otherwise. +.Sp +The default is 0. +.PP +\fILzma and Xz Compression Options\fR +.IX Subsection "Lzma and Xz Compression Options" +.ie n .IP """Preset => number""" 5 +.el .IP "\f(CWPreset => number\fR" 5 +.IX Item "Preset => number" +Used to choose the LZMA compression preset. +.Sp +Valid values are 0\-9 and \f(CW\*(C`LZMA_PRESET_DEFAULT\*(C'\fR. +.Sp +0 is the fastest compression with the lowest memory usage and the lowest +compression. +.Sp +9 is the slowest compression with the highest memory usage but with the best +compression. +.Sp +This option is only valid if the \f(CW\*(C`Method\*(C'\fR is ZIP_CM_LZMA. It is ignored +otherwise. +.Sp +Defaults to \f(CW\*(C`LZMA_PRESET_DEFAULT\*(C'\fR (6). +.ie n .IP """Extreme => 0|1""" 5 +.el .IP "\f(CWExtreme => 0|1\fR" 5 +.IX Item "Extreme => 0|1" +Makes LZMA compression a lot slower, but a small compression gain. +.Sp +This option is only valid if the \f(CW\*(C`Method\*(C'\fR is ZIP_CM_LZMA. It is ignored +otherwise. +.Sp +Defaults to 0. +.PP +\fIOther Options\fR +.IX Subsection "Other Options" +.ie n .IP """Time => $number""" 5 +.el .IP "\f(CWTime => $number\fR" 5 +.IX Item "Time => $number" +Sets the last modified time field in the zip header to \f(CW$number\fR. +.Sp +This field defaults to the time the \f(CW\*(C`IO::Compress::Zip\*(C'\fR object was created +if this option is not specified and the \f(CW$input\fR parameter is not a +filename. +.ie n .IP """ExtAttr => $attr""" 5 +.el .IP "\f(CWExtAttr => $attr\fR" 5 +.IX Item "ExtAttr => $attr" +This option controls the "external file attributes" field in the central +header of the zip file. This is a 4 byte field. +.Sp +If you are running a Unix derivative this value defaults to +.Sp +.Vb 1 +\& 0100644 << 16 +.Ve +.Sp +This should allow read/write access to any files that are extracted from +the zip file/buffer`. +.Sp +For all other systems it defaults to 0. +.ie n .IP """exTime => [$atime, $mtime, $ctime]""" 5 +.el .IP "\f(CWexTime => [$atime, $mtime, $ctime]\fR" 5 +.IX Item "exTime => [$atime, $mtime, $ctime]" +This option expects an array reference with exactly three elements: +\&\f(CW$atime\fR, \f(CW\*(C`mtime\*(C'\fR and \f(CW$ctime\fR. These correspond to the last access +time, last modification time and creation time respectively. +.Sp +It uses these values to set the extended timestamp field (ID is "UT") in +the local zip header using the three values, \f(CW$atime\fR, \f(CW$mtime\fR, \f(CW$ctime\fR. In +addition it sets the extended timestamp field in the central zip header +using \f(CW$mtime\fR. +.Sp +If any of the three values is \f(CW\*(C`undef\*(C'\fR that time value will not be used. +So, for example, to set only the \f(CW$mtime\fR you would use this +.Sp +.Vb 1 +\& exTime => [undef, $mtime, undef] +.Ve +.Sp +If the \f(CW\*(C`Minimal\*(C'\fR option is set to true, this option will be ignored. +.Sp +By default no extended time field is created. +.ie n .IP """exUnix2 => [$uid, $gid]""" 5 +.el .IP "\f(CWexUnix2 => [$uid, $gid]\fR" 5 +.IX Item "exUnix2 => [$uid, $gid]" +This option expects an array reference with exactly two elements: \f(CW$uid\fR +and \f(CW$gid\fR. These values correspond to the numeric User ID (UID) and Group ID +(GID) of the owner of the files respectively. +.Sp +When the \f(CW\*(C`exUnix2\*(C'\fR option is present it will trigger the creation of a +Unix2 extra field (ID is "Ux") in the local zip header. This will be populated +with \f(CW$uid\fR and \f(CW$gid\fR. An empty Unix2 extra field will also +be created in the central zip header. +.Sp +Note \- The UID & GID are stored as 16\-bit +integers in the "Ux" field. Use \f(CW\*(C`exUnixN\*(C'\fR if your UID or GID are +32\-bit. +.Sp +If the \f(CW\*(C`Minimal\*(C'\fR option is set to true, this option will be ignored. +.Sp +By default no Unix2 extra field is created. +.ie n .IP """exUnixN => [$uid, $gid]""" 5 +.el .IP "\f(CWexUnixN => [$uid, $gid]\fR" 5 +.IX Item "exUnixN => [$uid, $gid]" +This option expects an array reference with exactly two elements: \f(CW$uid\fR +and \f(CW$gid\fR. These values correspond to the numeric User ID (UID) and Group ID +(GID) of the owner of the files respectively. +.Sp +When the \f(CW\*(C`exUnixN\*(C'\fR option is present it will trigger the creation of a +UnixN extra field (ID is "ux") in both the local and central zip headers. +This will be populated with \f(CW$uid\fR and \f(CW$gid\fR. +The UID & GID are stored as 32\-bit integers. +.Sp +If the \f(CW\*(C`Minimal\*(C'\fR option is set to true, this option will be ignored. +.Sp +By default no UnixN extra field is created. +.ie n .IP """Comment => $comment""" 5 +.el .IP "\f(CWComment => $comment\fR" 5 +.IX Item "Comment => $comment" +Stores the contents of \f(CW$comment\fR in the Central File Header of +the zip file. +.Sp +Set the \f(CW\*(C`Efs\*(C'\fR option to true if you want to store a UTF8 comment. +.Sp +By default, no comment field is written to the zip file. +.ie n .IP """ZipComment => $comment""" 5 +.el .IP "\f(CWZipComment => $comment\fR" 5 +.IX Item "ZipComment => $comment" +Stores the contents of \f(CW$comment\fR in the End of Central Directory record +of the zip file. +.Sp +By default, no comment field is written to the zip file. +.ie n .IP """Method => $method""" 5 +.el .IP "\f(CWMethod => $method\fR" 5 +.IX Item "Method => $method" +Controls which compression method is used. At present the compression +methods supported are: Store (no compression at all), Deflate, +Bzip2, Zstd, Xz and Lzma. +.Sp +The symbols ZIP_CM_STORE, ZIP_CM_DEFLATE, ZIP_CM_BZIP2, ZIP_CM_ZSTD, ZIP_CM_XZ and ZIP_CM_LZMA +are used to select the compression method. +.Sp +These constants are not imported by \f(CW\*(C`IO::Compress::Zip\*(C'\fR by default. +.Sp +.Vb 3 +\& use IO::Compress::Zip qw(:zip_method); +\& use IO::Compress::Zip qw(:constants); +\& use IO::Compress::Zip qw(:all); +.Ve +.Sp +Note that to create Bzip2 content, the module \f(CW\*(C`IO::Compress::Bzip2\*(C'\fR must +be installed. A fatal error will be thrown if you attempt to create Bzip2 +content when \f(CW\*(C`IO::Compress::Bzip2\*(C'\fR is not available. +.Sp +Note that to create Lzma content, the module \f(CW\*(C`IO::Compress::Lzma\*(C'\fR must +be installed. A fatal error will be thrown if you attempt to create Lzma +content when \f(CW\*(C`IO::Compress::Lzma\*(C'\fR is not available. +.Sp +Note that to create Xz content, the module \f(CW\*(C`IO::Compress::Xz\*(C'\fR must +be installed. A fatal error will be thrown if you attempt to create Xz +content when \f(CW\*(C`IO::Compress::Xz\*(C'\fR is not available. +.Sp +Note that to create Zstd content, the module \f(CW\*(C`IO::Compress::Zstd\*(C'\fR must +be installed. A fatal error will be thrown if you attempt to create Zstd +content when \f(CW\*(C`IO::Compress::Zstd\*(C'\fR is not available. +.Sp +The default method is ZIP_CM_DEFLATE. +.ie n .IP """TextFlag => 0|1""" 5 +.el .IP "\f(CWTextFlag => 0|1\fR" 5 +.IX Item "TextFlag => 0|1" +This parameter controls the setting of a bit in the zip central header. It +is used to signal that the data stored in the zip file/buffer is probably +text. +.Sp +In one-shot mode this flag will be set to true if the Perl \f(CW\*(C`\-T\*(C'\fR operator thinks +the file contains text. +.Sp +The default is 0. +.ie n .IP """ExtraFieldLocal => $data""" 5 +.el .IP "\f(CWExtraFieldLocal => $data\fR" 5 +.IX Item "ExtraFieldLocal => $data" +.PD 0 +.ie n .IP """ExtraFieldCentral => $data""" 5 +.el .IP "\f(CWExtraFieldCentral => $data\fR" 5 +.IX Item "ExtraFieldCentral => $data" +.PD +The \f(CW\*(C`ExtraFieldLocal\*(C'\fR option is used to store additional metadata in the +local header for the zip file/buffer. The \f(CW\*(C`ExtraFieldCentral\*(C'\fR does the +same for the matching central header. +.Sp +An extra field consists of zero or more subfields. Each subfield consists +of a two byte header followed by the subfield data. +.Sp +The list of subfields can be supplied in any of the following formats +.Sp +.Vb 4 +\& ExtraFieldLocal => [$id1, $data1, +\& $id2, $data2, +\& ... +\& ] +\& +\& ExtraFieldLocal => [ [$id1 => $data1], +\& [$id2 => $data2], +\& ... +\& ] +\& +\& ExtraFieldLocal => { $id1 => $data1, +\& $id2 => $data2, +\& ... +\& } +.Ve +.Sp +Where \f(CW$id1\fR, \f(CW$id2\fR are two byte subfield ID's. +.Sp +If you use the hash syntax, you have no control over the order in which +the ExtraSubFields are stored, plus you cannot have SubFields with +duplicate ID. +.Sp +Alternatively the list of subfields can by supplied as a scalar, thus +.Sp +.Vb 1 +\& ExtraField => $rawdata +.Ve +.Sp +In this case \f(CW\*(C`IO::Compress::Zip\*(C'\fR will check that \f(CW$rawdata\fR consists of +zero or more conformant sub-fields. +.Sp +The Extended Time field (ID "UT"), set using the \f(CW\*(C`exTime\*(C'\fR option, and the +Unix2 extra field (ID "Ux), set using the \f(CW\*(C`exUnix2\*(C'\fR option, are examples +of extra fields. +.Sp +If the \f(CW\*(C`Minimal\*(C'\fR option is set to true, this option will be ignored. +.Sp +The maximum size of an extra field 65535 bytes. +.ie n .IP """Strict => 0|1""" 5 +.el .IP "\f(CWStrict => 0|1\fR" 5 +.IX Item "Strict => 0|1" +This is a placeholder option. +.SS Examples +.IX Subsection "Examples" +TODO +.SH Methods +.IX Header "Methods" +.SS print +.IX Subsection "print" +Usage is +.PP +.Vb 2 +\& $z\->print($data) +\& print $z $data +.Ve +.PP +Compresses and outputs the contents of the \f(CW$data\fR parameter. This +has the same behaviour as the \f(CW\*(C`print\*(C'\fR built-in. +.PP +Returns true if successful. +.SS printf +.IX Subsection "printf" +Usage is +.PP +.Vb 2 +\& $z\->printf($format, $data) +\& printf $z $format, $data +.Ve +.PP +Compresses and outputs the contents of the \f(CW$data\fR parameter. +.PP +Returns true if successful. +.SS syswrite +.IX Subsection "syswrite" +Usage is +.PP +.Vb 3 +\& $z\->syswrite $data +\& $z\->syswrite $data, $length +\& $z\->syswrite $data, $length, $offset +.Ve +.PP +Compresses and outputs the contents of the \f(CW$data\fR parameter. +.PP +Returns the number of uncompressed bytes written, or \f(CW\*(C`undef\*(C'\fR if +unsuccessful. +.SS write +.IX Subsection "write" +Usage is +.PP +.Vb 3 +\& $z\->write $data +\& $z\->write $data, $length +\& $z\->write $data, $length, $offset +.Ve +.PP +Compresses and outputs the contents of the \f(CW$data\fR parameter. +.PP +Returns the number of uncompressed bytes written, or \f(CW\*(C`undef\*(C'\fR if +unsuccessful. +.SS flush +.IX Subsection "flush" +Usage is +.PP +.Vb 2 +\& $z\->flush; +\& $z\->flush($flush_type); +.Ve +.PP +Flushes any pending compressed data to the output file/buffer. +.PP +This method takes an optional parameter, \f(CW$flush_type\fR, that controls +how the flushing will be carried out. By default the \f(CW$flush_type\fR +used is \f(CW\*(C`Z_FINISH\*(C'\fR. Other valid values for \f(CW$flush_type\fR are +\&\f(CW\*(C`Z_NO_FLUSH\*(C'\fR, \f(CW\*(C`Z_SYNC_FLUSH\*(C'\fR, \f(CW\*(C`Z_FULL_FLUSH\*(C'\fR and \f(CW\*(C`Z_BLOCK\*(C'\fR. It is +strongly recommended that you only set the \f(CW\*(C`flush_type\*(C'\fR parameter if +you fully understand the implications of what it does \- overuse of \f(CW\*(C`flush\*(C'\fR +can seriously degrade the level of compression achieved. See the \f(CW\*(C`zlib\*(C'\fR +documentation for details. +.PP +Returns true on success. +.SS tell +.IX Subsection "tell" +Usage is +.PP +.Vb 2 +\& $z\->tell() +\& tell $z +.Ve +.PP +Returns the uncompressed file offset. +.SS eof +.IX Subsection "eof" +Usage is +.PP +.Vb 2 +\& $z\->eof(); +\& eof($z); +.Ve +.PP +Returns true if the \f(CW\*(C`close\*(C'\fR method has been called. +.SS seek +.IX Subsection "seek" +.Vb 2 +\& $z\->seek($position, $whence); +\& seek($z, $position, $whence); +.Ve +.PP +Provides a sub-set of the \f(CW\*(C`seek\*(C'\fR functionality, with the restriction +that it is only legal to seek forward in the output file/buffer. +It is a fatal error to attempt to seek backward. +.PP +Empty parts of the file/buffer will have NULL (0x00) bytes written to them. +.PP +The \f(CW$whence\fR parameter takes one the usual values, namely SEEK_SET, +SEEK_CUR or SEEK_END. +.PP +Returns 1 on success, 0 on failure. +.SS binmode +.IX Subsection "binmode" +Usage is +.PP +.Vb 2 +\& $z\->binmode +\& binmode $z ; +.Ve +.PP +This is a noop provided for completeness. +.SS opened +.IX Subsection "opened" +.Vb 1 +\& $z\->opened() +.Ve +.PP +Returns true if the object currently refers to a opened file/buffer. +.SS autoflush +.IX Subsection "autoflush" +.Vb 2 +\& my $prev = $z\->autoflush() +\& my $prev = $z\->autoflush(EXPR) +.Ve +.PP +If the \f(CW$z\fR object is associated with a file or a filehandle, this method +returns the current autoflush setting for the underlying filehandle. If +\&\f(CW\*(C`EXPR\*(C'\fR is present, and is non-zero, it will enable flushing after every +write/print operation. +.PP +If \f(CW$z\fR is associated with a buffer, this method has no effect and always +returns \f(CW\*(C`undef\*(C'\fR. +.PP +\&\fBNote\fR that the special variable \f(CW$|\fR \fBcannot\fR be used to set or +retrieve the autoflush setting. +.SS input_line_number +.IX Subsection "input_line_number" +.Vb 2 +\& $z\->input_line_number() +\& $z\->input_line_number(EXPR) +.Ve +.PP +This method always returns \f(CW\*(C`undef\*(C'\fR when compressing. +.SS fileno +.IX Subsection "fileno" +.Vb 2 +\& $z\->fileno() +\& fileno($z) +.Ve +.PP +If the \f(CW$z\fR object is associated with a file or a filehandle, \f(CW\*(C`fileno\*(C'\fR +will return the underlying file descriptor. Once the \f(CW\*(C`close\*(C'\fR method is +called \f(CW\*(C`fileno\*(C'\fR will return \f(CW\*(C`undef\*(C'\fR. +.PP +If the \f(CW$z\fR object is associated with a buffer, this method will return +\&\f(CW\*(C`undef\*(C'\fR. +.SS close +.IX Subsection "close" +.Vb 2 +\& $z\->close() ; +\& close $z ; +.Ve +.PP +Flushes any pending compressed data and then closes the output file/buffer. +.PP +For most versions of Perl this method will be automatically invoked if +the IO::Compress::Zip object is destroyed (either explicitly or by the +variable with the reference to the object going out of scope). The +exceptions are Perl versions 5.005 through 5.00504 and 5.8.0. In +these cases, the \f(CW\*(C`close\*(C'\fR method will be called automatically, but +not until global destruction of all live objects when the program is +terminating. +.PP +Therefore, if you want your scripts to be able to run on all versions +of Perl, you should call \f(CW\*(C`close\*(C'\fR explicitly and not rely on automatic +closing. +.PP +Returns true on success, otherwise 0. +.PP +If the \f(CW\*(C`AutoClose\*(C'\fR option has been enabled when the IO::Compress::Zip +object was created, and the object is associated with a file, the +underlying file will also be closed. +.SS newStream([OPTS]) +.IX Subsection "newStream([OPTS])" +Usage is +.PP +.Vb 1 +\& $z\->newStream( [OPTS] ) +.Ve +.PP +Closes the current compressed data stream and starts a new one. +.PP +OPTS consists of any of the options that are available when creating +the \f(CW$z\fR object. +.PP +See the "Constructor Options" section for more details. +.SS deflateParams +.IX Subsection "deflateParams" +Usage is +.PP +.Vb 1 +\& $z\->deflateParams +.Ve +.PP +TODO +.SH Importing +.IX Header "Importing" +A number of symbolic constants are required by some methods in +\&\f(CW\*(C`IO::Compress::Zip\*(C'\fR. None are imported by default. +.IP :all 5 +.IX Item ":all" +Imports \f(CW\*(C`zip\*(C'\fR, \f(CW$ZipError\fR and all symbolic +constants that can be used by \f(CW\*(C`IO::Compress::Zip\*(C'\fR. Same as doing this +.Sp +.Vb 1 +\& use IO::Compress::Zip qw(zip $ZipError :constants) ; +.Ve +.IP :constants 5 +.IX Item ":constants" +Import all symbolic constants. Same as doing this +.Sp +.Vb 1 +\& use IO::Compress::Zip qw(:flush :level :strategy :zip_method) ; +.Ve +.IP :flush 5 +.IX Item ":flush" +These symbolic constants are used by the \f(CW\*(C`flush\*(C'\fR method. +.Sp +.Vb 6 +\& Z_NO_FLUSH +\& Z_PARTIAL_FLUSH +\& Z_SYNC_FLUSH +\& Z_FULL_FLUSH +\& Z_FINISH +\& Z_BLOCK +.Ve +.IP :level 5 +.IX Item ":level" +These symbolic constants are used by the \f(CW\*(C`Level\*(C'\fR option in the constructor. +.Sp +.Vb 4 +\& Z_NO_COMPRESSION +\& Z_BEST_SPEED +\& Z_BEST_COMPRESSION +\& Z_DEFAULT_COMPRESSION +.Ve +.IP :strategy 5 +.IX Item ":strategy" +These symbolic constants are used by the \f(CW\*(C`Strategy\*(C'\fR option in the constructor. +.Sp +.Vb 5 +\& Z_FILTERED +\& Z_HUFFMAN_ONLY +\& Z_RLE +\& Z_FIXED +\& Z_DEFAULT_STRATEGY +.Ve +.IP :zip_method 5 +.IX Item ":zip_method" +These symbolic constants are used by the \f(CW\*(C`Method\*(C'\fR option in the +constructor. +.Sp +.Vb 3 +\& ZIP_CM_STORE +\& ZIP_CM_DEFLATE +\& ZIP_CM_BZIP2 +.Ve +.SH EXAMPLES +.IX Header "EXAMPLES" +.SS "Apache::GZip Revisited" +.IX Subsection "Apache::GZip Revisited" +See IO::Compress::FAQ +.SS "Working with Net::FTP" +.IX Subsection "Working with Net::FTP" +See IO::Compress::FAQ +.SH SUPPORT +.IX Header "SUPPORT" +General feedback/questions/bug reports should be sent to +<https://github.com/pmqs/IO\-Compress/issues> (preferred) or +<https://rt.cpan.org/Public/Dist/Display.html?Name=IO\-Compress>. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Compress::Zlib, 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 +.PP +IO::Compress::FAQ +.PP +File::GlobMapper, Archive::Zip, +Archive::Tar, +IO::Zlib +.PP +For RFC 1950, 1951 and 1952 see +<https://datatracker.ietf.org/doc/html/rfc1950>, +<https://datatracker.ietf.org/doc/html/rfc1951> and +<https://datatracker.ietf.org/doc/html/rfc1952> +.PP +The \fIzlib\fR compression library was written by Jean-loup Gailly +\&\f(CW\*(C`gzip@prep.ai.mit.edu\*(C'\fR and Mark Adler \f(CW\*(C`madler@alumni.caltech.edu\*(C'\fR. +.PP +The primary site for the \fIzlib\fR compression library is +<http://www.zlib.org>. +.PP +The primary site for the \fIzlib-ng\fR compression library is +<https://github.com/zlib\-ng/zlib\-ng>. +.PP +The primary site for gzip is <http://www.gzip.org>. +.SH AUTHOR +.IX Header "AUTHOR" +This module was written by Paul Marquess, \f(CW\*(C`pmqs@cpan.org\*(C'\fR. +.SH "MODIFICATION HISTORY" +.IX Header "MODIFICATION HISTORY" +See the Changes file. +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (c) 2005\-2023 Paul Marquess. All rights reserved. +.PP +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. |