When $input_filename_or_reference maps to multiple files/buffers and
$output_filename_or_reference is a single
file/buffer the input files/buffers will be stored
in $output_filename_or_reference as a concatenated series of compressed data streams.

Unless specified below, the optional parameters for gzip,
OPTS, are the same as those used with the OOinterface defined in the
Constructor Options section below.

AutoClose => 0|1

This option applies to any input or output data streams to
gzip that are filehandles.

If AutoClose is specified, and the value is true, it will result in all
input and/or output filehandles being closed once gzip has
completed.

This parameter defaults to 0.

BinModeIn => 0|1

When reading from a file or filehandle, set binmode before reading.

Defaults to 0.

Append => 0|1

The behaviour of this option is dependent on the type of output data
stream.

o

A Buffer

If Append 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.

o

A Filename

If Append 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.

o

A Filehandle

If Append is enabled, the filehandle will be positioned to the end of
the file via a call to seek before any compressed data is
written to it. Otherwise the file pointer will not be moved.

When Append is specified, and set to true, it will append all compressed
data to the output data stream.

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.

Conversely when Append is not specified, or it is present and is set to
false, it will operate as follows.

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.

It returns an IO::Compress::Gzip object on success and undef on failure.
The variable $GzipError will contain an error message on failure.

If you are running Perl 5.005 or better the object, $z, returned from
IO::Compress::Gzip can be used exactly like an IO::File filehandle.
This means that all normal output file operations can be carried out
with $z.
For example, to write to a compressed file/buffer you can use either of
these forms

$z->print("hello world\n");
print $z "hello world\n";

The mandatory parameter $output is used to control the destination
of the compressed data. This parameter can take one of these forms.

A filename

If the $output 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.

A filehandle

If the $output parameter is a filehandle, the compressed data will be
written to it.
The string - can be used as an alias for standard output.

A scalar reference

If $output is a scalar reference, the compressed data will be stored
in $$output.

If the $output parameter is any other type, IO::Compress::Gzip::new will
return undef.

This option is only valid when the $output parameter is a filehandle. If
specified, and the value is true, it will result in the $output being
closed once either the close method is called or the IO::Compress::Gzip
object is destroyed.

This parameter defaults to 0.

Append => 0|1

Opens $output in append mode.

The behaviour of this option is dependent on the type of $output.

o

A Buffer

If $output is a buffer and Append is enabled, all compressed data
will be append to the end of $output. Otherwise $output will be
cleared before any data is written to it.

o

A Filename

If $output is a filename and Append 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.

o

A Filehandle

If $output is a filehandle, the file pointer will be positioned to the
end of the file via a call to seek before any compressed data is written
to it. Otherwise the file pointer will not be moved.

This parameter defaults to 0.

Merge => 0|1

This option is used to compress input data and append it to an existing
compressed data stream in $output. The end result is a single compressed
data stream stored in $output.

It is a fatal error to attempt to use this option when $output is not an
RFC 1952 data stream.

There are a number of other limitations with the Merge option:

1.

This module needs to have been built with zlib 1.2.1 or better to work. A
fatal error will be thrown ifMerge is used with an older version of
zlib.

2.

If $output is a file or a filehandle, it must be seekable.

This parameter defaults to 0.

-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.

Note, these constants are not imported by IO::Compress::Gzip by default.

use IO::Compress::Gzip qw(:strategy);
use IO::Compress::Gzip qw(:constants);
use IO::Compress::Gzip qw(:all);

-Strategy

Defines the strategy used to tune the compression. Use one of the symbolic
constants defined below.

Z_FILTERED
Z_HUFFMAN_ONLY
Z_RLE
Z_FIXED
Z_DEFAULT_STRATEGY

The default is Z_DEFAULT_STRATEGY.

Minimal => 0|1

If specified, this option will force the creation of the smallest possible
compliant gzip header (which is exactly 10 bytes long) as defined in
RFC 1952.

See the section titled Compliance in RFC 1952 for a definition
of the values used for the fields in the gzip header.

All other parameters that control the content of the gzip header will
be ignored if this parameter is set to 1.

This parameter defaults to 0.

Comment => $comment

Stores the contents of $comment in the COMMENT field in
the gzip header.
By default, no comment field is written to the gzip file.

If the -Strict option is enabled, the comment can only consist of ISO
8859-1 characters plus line feed.

If the -Strict option is disabled, the comment field can contain any
character except NULL. If any null characters are present, the field
will be truncated at the first NULL.

Name => $string

Stores the contents of $string in the gzip NAME header field. If
Name is not specified, no gzip NAME field will be created.

If the -Strict option is enabled, $string can only consist of ISO
8859-1 characters.

If -Strict is disabled, then $string can contain any character
except NULL. If any null characters are present, the field will be
truncated at the first NULL.

Time => $number

Sets the MTIME field in the gzip header to $number.

This field defaults to the time the IO::Compress::Gzip object was created
if this option is not specified.

TextFlag => 0|1

This parameter controls the setting of the FLG.FTEXT bit in the gzip
header. It is used to signal that the data stored in the gzip file/buffer
is probably text.

The default is 0.

HeaderCRC => 0|1

When true this parameter will set the FLG.FHCRC bit to 1 in the gzip header
and set the CRC16 header field to the CRC of the complete gzip header
except the CRC16 field itself.

<B>NoteB> that gzip files created with the HeaderCRC flag set to 1 cannot
be read by most, if not all, of the standard gunzip utilities, most
notably gzip version 1.2.4. You should therefore avoid using this option if
you want to maximize the portability of your gzip files.

This parameter defaults to 0.

OS_Code => $value

Stores $value in the gzip OS header field. A number between 0 and 255 is
valid.

If not specified, this parameter defaults to the OS code of the Operating
System this module was built on. The value 3 is used as a catch-all for all
Unix variants and unknown Operating Systems.

ExtraField => $data

This parameter allows additional metadata to be stored in the ExtraField in
the gzip header. An RFC 1952 compliant ExtraField consists of zero or more
subfields. Each subfield consists of a two byte header followed by the
subfield data.

Where $id1, $id2 are two byte subfield IDs. The second byte of
the ID cannot be 0, unless the Strict option has been disabled.

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.

Alternatively the list of subfields can by supplied as a scalar, thus

-ExtraField => $rawdata

If you use the raw format, and the Strict option is enabled,
IO::Compress::Gzip will check that $rawdata consists of zero or more
conformant sub-fields. When Strict is disabled, $rawdata can
consist of any arbitrary byte stream.

If an ExtraField option is specified and it is a simple scalar,
it must conform to the sub-field structure as defined in RFC 1952.

o

If an ExtraField option is specified the second byte of the ID will be
checked in each subfield to ensure that it does not contain the reserved
value 0x00.

When Strict is disabled the following behaviour will be policed:

o

The value supplied with -Name option can contain
any character except NULL.

o

The value supplied with -Comment option can contain any character
except NULL.

o

The values supplied with the -Name and -Comment options can contain
multiple embedded nulls. The string written to the gzip header will
consist of the characters up to, but not including, the first embedded
NULL.

o

If an ExtraField option is specified and it is a simple scalar, the
structure will not be checked. The only error is if the length is too big.

o

The ID header in an ExtraField sub-field can consist of any two bytes.

This method takes an optional parameter, $flush_type, that controls
how the flushing will be carried out. By default the $flush_type
used is Z_FINISH. Other valid values for $flush_type are
Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH and Z_BLOCK. It is
strongly recommended that you only set the flush_type parameter if
you fully understand the implications of what it does - overuse of flush
can seriously degrade the level of compression achieved. See the zlib
documentation for details.

If the $z object is associated with a file or a filehandle, this method
returns the current autoflush setting for the underlying filehandle. If
EXPR is present, and is non-zero, it will enable flushing after every
write/print operation.

If $z is associated with a buffer, this method has no effect and always
returns undef.

<B>NoteB> that the special variable $| <B>cannotB> be used to set or
retrieve the autoflush setting.

Flushes any pending compressed data and then closes the output file/buffer.

For most versions of Perl this method will be automatically invoked if
the IO::Compress::Gzip 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 close method will be called automatically, but
not until global destruction of all live objects when the program is
terminating.

Therefore, if you want your scripts to be able to run on all versions
of Perl, you should call close explicitly and not rely on automatic
closing.