1package IO::Compress::Deflate ; 2 3use strict ; 4use warnings; 5use bytes; 6 7require Exporter ; 8 9use IO::Compress::RawDeflate 2.024 ; 10 11use Compress::Raw::Zlib 2.024 ; 12use IO::Compress::Zlib::Constants 2.024 ; 13use IO::Compress::Base::Common 2.024 qw(createSelfTiedObject); 14 15 16our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $DeflateError); 17 18$VERSION = '2.024'; 19$DeflateError = ''; 20 21@ISA = qw(Exporter IO::Compress::RawDeflate); 22@EXPORT_OK = qw( $DeflateError deflate ) ; 23%EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ; 24push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; 25Exporter::export_ok_tags('all'); 26 27 28sub new 29{ 30 my $class = shift ; 31 32 my $obj = createSelfTiedObject($class, \$DeflateError); 33 return $obj->_create(undef, @_); 34} 35 36sub deflate 37{ 38 my $obj = createSelfTiedObject(undef, \$DeflateError); 39 return $obj->_def(@_); 40} 41 42 43sub bitmask($$$$) 44{ 45 my $into = shift ; 46 my $value = shift ; 47 my $offset = shift ; 48 my $mask = shift ; 49 50 return $into | (($value & $mask) << $offset ) ; 51} 52 53sub mkDeflateHdr($$$;$) 54{ 55 my $method = shift ; 56 my $cinfo = shift; 57 my $level = shift; 58 my $fdict_adler = shift ; 59 60 my $cmf = 0; 61 my $flg = 0; 62 my $fdict = 0; 63 $fdict = 1 if defined $fdict_adler; 64 65 $cmf = bitmask($cmf, $method, ZLIB_CMF_CM_OFFSET, ZLIB_CMF_CM_BITS); 66 $cmf = bitmask($cmf, $cinfo, ZLIB_CMF_CINFO_OFFSET, ZLIB_CMF_CINFO_BITS); 67 68 $flg = bitmask($flg, $fdict, ZLIB_FLG_FDICT_OFFSET, ZLIB_FLG_FDICT_BITS); 69 $flg = bitmask($flg, $level, ZLIB_FLG_LEVEL_OFFSET, ZLIB_FLG_LEVEL_BITS); 70 71 my $fcheck = 31 - ($cmf * 256 + $flg) % 31 ; 72 $flg = bitmask($flg, $fcheck, ZLIB_FLG_FCHECK_OFFSET, ZLIB_FLG_FCHECK_BITS); 73 74 my $hdr = pack("CC", $cmf, $flg) ; 75 $hdr .= pack("N", $fdict_adler) if $fdict ; 76 77 return $hdr; 78} 79 80sub mkHeader 81{ 82 my $self = shift ; 83 my $param = shift ; 84 85 my $level = $param->value('Level'); 86 my $strategy = $param->value('Strategy'); 87 88 my $lflag ; 89 $level = 6 90 if $level == Z_DEFAULT_COMPRESSION ; 91 92 if (ZLIB_VERNUM >= 0x1210) 93 { 94 if ($strategy >= Z_HUFFMAN_ONLY || $level < 2) 95 { $lflag = ZLIB_FLG_LEVEL_FASTEST } 96 elsif ($level < 6) 97 { $lflag = ZLIB_FLG_LEVEL_FAST } 98 elsif ($level == 6) 99 { $lflag = ZLIB_FLG_LEVEL_DEFAULT } 100 else 101 { $lflag = ZLIB_FLG_LEVEL_SLOWEST } 102 } 103 else 104 { 105 $lflag = ($level - 1) >> 1 ; 106 $lflag = 3 if $lflag > 3 ; 107 } 108 109 #my $wbits = (MAX_WBITS - 8) << 4 ; 110 my $wbits = 7; 111 mkDeflateHdr(ZLIB_CMF_CM_DEFLATED, $wbits, $lflag); 112} 113 114sub ckParams 115{ 116 my $self = shift ; 117 my $got = shift; 118 119 $got->value('ADLER32' => 1); 120 return 1 ; 121} 122 123 124sub mkTrailer 125{ 126 my $self = shift ; 127 return pack("N", *$self->{Compress}->adler32()) ; 128} 129 130sub mkFinalTrailer 131{ 132 return ''; 133} 134 135#sub newHeader 136#{ 137# my $self = shift ; 138# return *$self->{Header}; 139#} 140 141sub getExtraParams 142{ 143 my $self = shift ; 144 return $self->getZlibParams(), 145} 146 147sub getInverseClass 148{ 149 return ('IO::Uncompress::Inflate', 150 \$IO::Uncompress::Inflate::InflateError); 151} 152 153sub getFileInfo 154{ 155 my $self = shift ; 156 my $params = shift; 157 my $file = shift ; 158 159} 160 161 162 1631; 164 165__END__ 166 167=head1 NAME 168 169IO::Compress::Deflate - Write RFC 1950 files/buffers 170 171 172 173=head1 SYNOPSIS 174 175 use IO::Compress::Deflate qw(deflate $DeflateError) ; 176 177 my $status = deflate $input => $output [,OPTS] 178 or die "deflate failed: $DeflateError\n"; 179 180 my $z = new IO::Compress::Deflate $output [,OPTS] 181 or die "deflate failed: $DeflateError\n"; 182 183 $z->print($string); 184 $z->printf($format, $string); 185 $z->write($string); 186 $z->syswrite($string [, $length, $offset]); 187 $z->flush(); 188 $z->tell(); 189 $z->eof(); 190 $z->seek($position, $whence); 191 $z->binmode(); 192 $z->fileno(); 193 $z->opened(); 194 $z->autoflush(); 195 $z->input_line_number(); 196 $z->newStream( [OPTS] ); 197 198 $z->deflateParams(); 199 200 $z->close() ; 201 202 $DeflateError ; 203 204 # IO::File mode 205 206 print $z $string; 207 printf $z $format, $string; 208 tell $z 209 eof $z 210 seek $z, $position, $whence 211 binmode $z 212 fileno $z 213 close $z ; 214 215 216=head1 DESCRIPTION 217 218This module provides a Perl interface that allows writing compressed 219data to files or buffer as defined in RFC 1950. 220 221For reading RFC 1950 files/buffers, see the companion module 222L<IO::Uncompress::Inflate|IO::Uncompress::Inflate>. 223 224=head1 Functional Interface 225 226A top-level function, C<deflate>, is provided to carry out 227"one-shot" compression between buffers and/or files. For finer 228control over the compression process, see the L</"OO Interface"> 229section. 230 231 use IO::Compress::Deflate qw(deflate $DeflateError) ; 232 233 deflate $input => $output [,OPTS] 234 or die "deflate failed: $DeflateError\n"; 235 236The functional interface needs Perl5.005 or better. 237 238=head2 deflate $input => $output [, OPTS] 239 240C<deflate> expects at least two parameters, C<$input> and C<$output>. 241 242=head3 The C<$input> parameter 243 244The parameter, C<$input>, is used to define the source of 245the uncompressed data. 246 247It can take one of the following forms: 248 249=over 5 250 251=item A filename 252 253If the C<$input> parameter is a simple scalar, it is assumed to be a 254filename. This file will be opened for reading and the input data 255will be read from it. 256 257=item A filehandle 258 259If the C<$input> parameter is a filehandle, the input data will be 260read from it. 261The string '-' can be used as an alias for standard input. 262 263=item A scalar reference 264 265If C<$input> is a scalar reference, the input data will be read 266from C<$$input>. 267 268=item An array reference 269 270If C<$input> is an array reference, each element in the array must be a 271filename. 272 273The input data will be read from each file in turn. 274 275The complete array will be walked to ensure that it only 276contains valid filenames before any data is compressed. 277 278=item An Input FileGlob string 279 280If C<$input> is a string that is delimited by the characters "<" and ">" 281C<deflate> will assume that it is an I<input fileglob string>. The 282input is the list of files that match the fileglob. 283 284If the fileglob does not match any files ... 285 286See L<File::GlobMapper|File::GlobMapper> for more details. 287 288=back 289 290If the C<$input> parameter is any other type, C<undef> will be returned. 291 292=head3 The C<$output> parameter 293 294The parameter C<$output> is used to control the destination of the 295compressed data. This parameter can take one of these forms. 296 297=over 5 298 299=item A filename 300 301If the C<$output> parameter is a simple scalar, it is assumed to be a 302filename. This file will be opened for writing and the compressed 303data will be written to it. 304 305=item A filehandle 306 307If the C<$output> parameter is a filehandle, the compressed data 308will be written to it. 309The string '-' can be used as an alias for standard output. 310 311=item A scalar reference 312 313If C<$output> is a scalar reference, the compressed data will be 314stored in C<$$output>. 315 316=item An Array Reference 317 318If C<$output> is an array reference, the compressed data will be 319pushed onto the array. 320 321=item An Output FileGlob 322 323If C<$output> is a string that is delimited by the characters "<" and ">" 324C<deflate> will assume that it is an I<output fileglob string>. The 325output is the list of files that match the fileglob. 326 327When C<$output> is an fileglob string, C<$input> must also be a fileglob 328string. Anything else is an error. 329 330=back 331 332If the C<$output> parameter is any other type, C<undef> will be returned. 333 334=head2 Notes 335 336When C<$input> maps to multiple files/buffers and C<$output> is a single 337file/buffer the input files/buffers will be stored 338in C<$output> as a concatenated series of compressed data streams. 339 340=head2 Optional Parameters 341 342Unless specified below, the optional parameters for C<deflate>, 343C<OPTS>, are the same as those used with the OO interface defined in the 344L</"Constructor Options"> section below. 345 346=over 5 347 348=item C<< AutoClose => 0|1 >> 349 350This option applies to any input or output data streams to 351C<deflate> that are filehandles. 352 353If C<AutoClose> is specified, and the value is true, it will result in all 354input and/or output filehandles being closed once C<deflate> has 355completed. 356 357This parameter defaults to 0. 358 359=item C<< BinModeIn => 0|1 >> 360 361When reading from a file or filehandle, set C<binmode> before reading. 362 363Defaults to 0. 364 365=item C<< Append => 0|1 >> 366 367The behaviour of this option is dependent on the type of output data 368stream. 369 370=over 5 371 372=item * A Buffer 373 374If C<Append> is enabled, all compressed data will be append to the end of 375the output buffer. Otherwise the output buffer will be cleared before any 376compressed data is written to it. 377 378=item * A Filename 379 380If C<Append> is enabled, the file will be opened in append mode. Otherwise 381the contents of the file, if any, will be truncated before any compressed 382data is written to it. 383 384=item * A Filehandle 385 386If C<Append> is enabled, the filehandle will be positioned to the end of 387the file via a call to C<seek> before any compressed data is 388written to it. Otherwise the file pointer will not be moved. 389 390=back 391 392When C<Append> is specified, and set to true, it will I<append> all compressed 393data to the output data stream. 394 395So when the output is a filehandle it will carry out a seek to the eof 396before writing any compressed data. If the output is a filename, it will be opened for 397appending. If the output is a buffer, all compressed data will be appened to 398the existing buffer. 399 400Conversely when C<Append> is not specified, or it is present and is set to 401false, it will operate as follows. 402 403When the output is a filename, it will truncate the contents of the file 404before writing any compressed data. If the output is a filehandle 405its position will not be changed. If the output is a buffer, it will be 406wiped before any compressed data is output. 407 408Defaults to 0. 409 410=back 411 412=head2 Examples 413 414To read the contents of the file C<file1.txt> and write the compressed 415data to the file C<file1.txt.1950>. 416 417 use strict ; 418 use warnings ; 419 use IO::Compress::Deflate qw(deflate $DeflateError) ; 420 421 my $input = "file1.txt"; 422 deflate $input => "$input.1950" 423 or die "deflate failed: $DeflateError\n"; 424 425To read from an existing Perl filehandle, C<$input>, and write the 426compressed data to a buffer, C<$buffer>. 427 428 use strict ; 429 use warnings ; 430 use IO::Compress::Deflate qw(deflate $DeflateError) ; 431 use IO::File ; 432 433 my $input = new IO::File "<file1.txt" 434 or die "Cannot open 'file1.txt': $!\n" ; 435 my $buffer ; 436 deflate $input => \$buffer 437 or die "deflate failed: $DeflateError\n"; 438 439To compress all files in the directory "/my/home" that match "*.txt" 440and store the compressed data in the same directory 441 442 use strict ; 443 use warnings ; 444 use IO::Compress::Deflate qw(deflate $DeflateError) ; 445 446 deflate '</my/home/*.txt>' => '<*.1950>' 447 or die "deflate failed: $DeflateError\n"; 448 449and if you want to compress each file one at a time, this will do the trick 450 451 use strict ; 452 use warnings ; 453 use IO::Compress::Deflate qw(deflate $DeflateError) ; 454 455 for my $input ( glob "/my/home/*.txt" ) 456 { 457 my $output = "$input.1950" ; 458 deflate $input => $output 459 or die "Error compressing '$input': $DeflateError\n"; 460 } 461 462=head1 OO Interface 463 464=head2 Constructor 465 466The format of the constructor for C<IO::Compress::Deflate> is shown below 467 468 my $z = new IO::Compress::Deflate $output [,OPTS] 469 or die "IO::Compress::Deflate failed: $DeflateError\n"; 470 471It returns an C<IO::Compress::Deflate> object on success and undef on failure. 472The variable C<$DeflateError> will contain an error message on failure. 473 474If you are running Perl 5.005 or better the object, C<$z>, returned from 475IO::Compress::Deflate can be used exactly like an L<IO::File|IO::File> filehandle. 476This means that all normal output file operations can be carried out 477with C<$z>. 478For example, to write to a compressed file/buffer you can use either of 479these forms 480 481 $z->print("hello world\n"); 482 print $z "hello world\n"; 483 484The mandatory parameter C<$output> is used to control the destination 485of the compressed data. This parameter can take one of these forms. 486 487=over 5 488 489=item A filename 490 491If the C<$output> parameter is a simple scalar, it is assumed to be a 492filename. This file will be opened for writing and the compressed data 493will be written to it. 494 495=item A filehandle 496 497If the C<$output> parameter is a filehandle, the compressed data will be 498written to it. 499The string '-' can be used as an alias for standard output. 500 501=item A scalar reference 502 503If C<$output> is a scalar reference, the compressed data will be stored 504in C<$$output>. 505 506=back 507 508If the C<$output> parameter is any other type, C<IO::Compress::Deflate>::new will 509return undef. 510 511=head2 Constructor Options 512 513C<OPTS> is any combination of the following options: 514 515=over 5 516 517=item C<< AutoClose => 0|1 >> 518 519This option is only valid when the C<$output> parameter is a filehandle. If 520specified, and the value is true, it will result in the C<$output> being 521closed once either the C<close> method is called or the C<IO::Compress::Deflate> 522object is destroyed. 523 524This parameter defaults to 0. 525 526=item C<< Append => 0|1 >> 527 528Opens C<$output> in append mode. 529 530The behaviour of this option is dependent on the type of C<$output>. 531 532=over 5 533 534=item * A Buffer 535 536If C<$output> is a buffer and C<Append> is enabled, all compressed data 537will be append to the end of C<$output>. Otherwise C<$output> will be 538cleared before any data is written to it. 539 540=item * A Filename 541 542If C<$output> is a filename and C<Append> is enabled, the file will be 543opened in append mode. Otherwise the contents of the file, if any, will be 544truncated before any compressed data is written to it. 545 546=item * A Filehandle 547 548If C<$output> is a filehandle, the file pointer will be positioned to the 549end of the file via a call to C<seek> before any compressed data is written 550to it. Otherwise the file pointer will not be moved. 551 552=back 553 554This parameter defaults to 0. 555 556=item C<< Merge => 0|1 >> 557 558This option is used to compress input data and append it to an existing 559compressed data stream in C<$output>. The end result is a single compressed 560data stream stored in C<$output>. 561 562It is a fatal error to attempt to use this option when C<$output> is not an 563RFC 1950 data stream. 564 565There are a number of other limitations with the C<Merge> option: 566 567=over 5 568 569=item 1 570 571This module needs to have been built with zlib 1.2.1 or better to work. A 572fatal error will be thrown if C<Merge> is used with an older version of 573zlib. 574 575=item 2 576 577If C<$output> is a file or a filehandle, it must be seekable. 578 579=back 580 581This parameter defaults to 0. 582 583=item -Level 584 585Defines the compression level used by zlib. The value should either be 586a number between 0 and 9 (0 means no compression and 9 is maximum 587compression), or one of the symbolic constants defined below. 588 589 Z_NO_COMPRESSION 590 Z_BEST_SPEED 591 Z_BEST_COMPRESSION 592 Z_DEFAULT_COMPRESSION 593 594The default is Z_DEFAULT_COMPRESSION. 595 596Note, these constants are not imported by C<IO::Compress::Deflate> by default. 597 598 use IO::Compress::Deflate qw(:strategy); 599 use IO::Compress::Deflate qw(:constants); 600 use IO::Compress::Deflate qw(:all); 601 602=item -Strategy 603 604Defines the strategy used to tune the compression. Use one of the symbolic 605constants defined below. 606 607 Z_FILTERED 608 Z_HUFFMAN_ONLY 609 Z_RLE 610 Z_FIXED 611 Z_DEFAULT_STRATEGY 612 613The default is Z_DEFAULT_STRATEGY. 614 615=item C<< Strict => 0|1 >> 616 617This is a placeholder option. 618 619=back 620 621=head2 Examples 622 623TODO 624 625=head1 Methods 626 627=head2 print 628 629Usage is 630 631 $z->print($data) 632 print $z $data 633 634Compresses and outputs the contents of the C<$data> parameter. This 635has the same behaviour as the C<print> built-in. 636 637Returns true if successful. 638 639=head2 printf 640 641Usage is 642 643 $z->printf($format, $data) 644 printf $z $format, $data 645 646Compresses and outputs the contents of the C<$data> parameter. 647 648Returns true if successful. 649 650=head2 syswrite 651 652Usage is 653 654 $z->syswrite $data 655 $z->syswrite $data, $length 656 $z->syswrite $data, $length, $offset 657 658Compresses and outputs the contents of the C<$data> parameter. 659 660Returns the number of uncompressed bytes written, or C<undef> if 661unsuccessful. 662 663=head2 write 664 665Usage is 666 667 $z->write $data 668 $z->write $data, $length 669 $z->write $data, $length, $offset 670 671Compresses and outputs the contents of the C<$data> parameter. 672 673Returns the number of uncompressed bytes written, or C<undef> if 674unsuccessful. 675 676=head2 flush 677 678Usage is 679 680 $z->flush; 681 $z->flush($flush_type); 682 683Flushes any pending compressed data to the output file/buffer. 684 685This method takes an optional parameter, C<$flush_type>, that controls 686how the flushing will be carried out. By default the C<$flush_type> 687used is C<Z_FINISH>. Other valid values for C<$flush_type> are 688C<Z_NO_FLUSH>, C<Z_SYNC_FLUSH>, C<Z_FULL_FLUSH> and C<Z_BLOCK>. It is 689strongly recommended that you only set the C<flush_type> parameter if 690you fully understand the implications of what it does - overuse of C<flush> 691can seriously degrade the level of compression achieved. See the C<zlib> 692documentation for details. 693 694Returns true on success. 695 696=head2 tell 697 698Usage is 699 700 $z->tell() 701 tell $z 702 703Returns the uncompressed file offset. 704 705=head2 eof 706 707Usage is 708 709 $z->eof(); 710 eof($z); 711 712Returns true if the C<close> method has been called. 713 714=head2 seek 715 716 $z->seek($position, $whence); 717 seek($z, $position, $whence); 718 719Provides a sub-set of the C<seek> functionality, with the restriction 720that it is only legal to seek forward in the output file/buffer. 721It is a fatal error to attempt to seek backward. 722 723Empty parts of the file/buffer will have NULL (0x00) bytes written to them. 724 725The C<$whence> parameter takes one the usual values, namely SEEK_SET, 726SEEK_CUR or SEEK_END. 727 728Returns 1 on success, 0 on failure. 729 730=head2 binmode 731 732Usage is 733 734 $z->binmode 735 binmode $z ; 736 737This is a noop provided for completeness. 738 739=head2 opened 740 741 $z->opened() 742 743Returns true if the object currently refers to a opened file/buffer. 744 745=head2 autoflush 746 747 my $prev = $z->autoflush() 748 my $prev = $z->autoflush(EXPR) 749 750If the C<$z> object is associated with a file or a filehandle, this method 751returns the current autoflush setting for the underlying filehandle. If 752C<EXPR> is present, and is non-zero, it will enable flushing after every 753write/print operation. 754 755If C<$z> is associated with a buffer, this method has no effect and always 756returns C<undef>. 757 758B<Note> that the special variable C<$|> B<cannot> be used to set or 759retrieve the autoflush setting. 760 761=head2 input_line_number 762 763 $z->input_line_number() 764 $z->input_line_number(EXPR) 765 766This method always returns C<undef> when compressing. 767 768=head2 fileno 769 770 $z->fileno() 771 fileno($z) 772 773If the C<$z> object is associated with a file or a filehandle, C<fileno> 774will return the underlying file descriptor. Once the C<close> method is 775called C<fileno> will return C<undef>. 776 777If the C<$z> object is is associated with a buffer, this method will return 778C<undef>. 779 780=head2 close 781 782 $z->close() ; 783 close $z ; 784 785Flushes any pending compressed data and then closes the output file/buffer. 786 787For most versions of Perl this method will be automatically invoked if 788the IO::Compress::Deflate object is destroyed (either explicitly or by the 789variable with the reference to the object going out of scope). The 790exceptions are Perl versions 5.005 through 5.00504 and 5.8.0. In 791these cases, the C<close> method will be called automatically, but 792not until global destruction of all live objects when the program is 793terminating. 794 795Therefore, if you want your scripts to be able to run on all versions 796of Perl, you should call C<close> explicitly and not rely on automatic 797closing. 798 799Returns true on success, otherwise 0. 800 801If the C<AutoClose> option has been enabled when the IO::Compress::Deflate 802object was created, and the object is associated with a file, the 803underlying file will also be closed. 804 805=head2 newStream([OPTS]) 806 807Usage is 808 809 $z->newStream( [OPTS] ) 810 811Closes the current compressed data stream and starts a new one. 812 813OPTS consists of any of the the options that are available when creating 814the C<$z> object. 815 816See the L</"Constructor Options"> section for more details. 817 818=head2 deflateParams 819 820Usage is 821 822 $z->deflateParams 823 824TODO 825 826=head1 Importing 827 828A number of symbolic constants are required by some methods in 829C<IO::Compress::Deflate>. None are imported by default. 830 831=over 5 832 833=item :all 834 835Imports C<deflate>, C<$DeflateError> and all symbolic 836constants that can be used by C<IO::Compress::Deflate>. Same as doing this 837 838 use IO::Compress::Deflate qw(deflate $DeflateError :constants) ; 839 840=item :constants 841 842Import all symbolic constants. Same as doing this 843 844 use IO::Compress::Deflate qw(:flush :level :strategy) ; 845 846=item :flush 847 848These symbolic constants are used by the C<flush> method. 849 850 Z_NO_FLUSH 851 Z_PARTIAL_FLUSH 852 Z_SYNC_FLUSH 853 Z_FULL_FLUSH 854 Z_FINISH 855 Z_BLOCK 856 857=item :level 858 859These symbolic constants are used by the C<Level> option in the constructor. 860 861 Z_NO_COMPRESSION 862 Z_BEST_SPEED 863 Z_BEST_COMPRESSION 864 Z_DEFAULT_COMPRESSION 865 866=item :strategy 867 868These symbolic constants are used by the C<Strategy> option in the constructor. 869 870 Z_FILTERED 871 Z_HUFFMAN_ONLY 872 Z_RLE 873 Z_FIXED 874 Z_DEFAULT_STRATEGY 875 876 877 878 879=back 880 881=head1 EXAMPLES 882 883=head2 Apache::GZip Revisited 884 885See L<IO::Compress::FAQ|IO::Compress::FAQ/"Apache::GZip Revisited"> 886 887 888 889=head2 Working with Net::FTP 890 891See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP"> 892 893=head1 SEE ALSO 894 895L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress> 896 897L<Compress::Zlib::FAQ|Compress::Zlib::FAQ> 898 899L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>, 900L<Archive::Tar|Archive::Tar>, 901L<IO::Zlib|IO::Zlib> 902 903For RFC 1950, 1951 and 1952 see 904F<http://www.faqs.org/rfcs/rfc1950.html>, 905F<http://www.faqs.org/rfcs/rfc1951.html> and 906F<http://www.faqs.org/rfcs/rfc1952.html> 907 908The I<zlib> compression library was written by Jean-loup Gailly 909F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>. 910 911The primary site for the I<zlib> compression library is 912F<http://www.zlib.org>. 913 914The primary site for gzip is F<http://www.gzip.org>. 915 916=head1 AUTHOR 917 918This module was written by Paul Marquess, F<pmqs@cpan.org>. 919 920=head1 MODIFICATION HISTORY 921 922See the Changes file. 923 924=head1 COPYRIGHT AND LICENSE 925 926Copyright (c) 2005-2010 Paul Marquess. All rights reserved. 927 928This program is free software; you can redistribute it and/or 929modify it under the same terms as Perl itself. 930 931