1 2package Compress::Raw::Zlib; 3 4require 5.006 ; 5require Exporter; 6use Carp ; 7 8use strict ; 9use warnings ; 10use bytes ; 11our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS); 12 13$VERSION = '2.093'; 14$XS_VERSION = $VERSION; 15$VERSION = eval $VERSION; 16 17@ISA = qw(Exporter); 18%EXPORT_TAGS = ( flush => [qw{ 19 Z_NO_FLUSH 20 Z_PARTIAL_FLUSH 21 Z_SYNC_FLUSH 22 Z_FULL_FLUSH 23 Z_FINISH 24 Z_BLOCK 25 }], 26 level => [qw{ 27 Z_NO_COMPRESSION 28 Z_BEST_SPEED 29 Z_BEST_COMPRESSION 30 Z_DEFAULT_COMPRESSION 31 }], 32 strategy => [qw{ 33 Z_FILTERED 34 Z_HUFFMAN_ONLY 35 Z_RLE 36 Z_FIXED 37 Z_DEFAULT_STRATEGY 38 }], 39 status => [qw{ 40 Z_OK 41 Z_STREAM_END 42 Z_NEED_DICT 43 Z_ERRNO 44 Z_STREAM_ERROR 45 Z_DATA_ERROR 46 Z_MEM_ERROR 47 Z_BUF_ERROR 48 Z_VERSION_ERROR 49 }], 50 ); 51 52%DEFLATE_CONSTANTS = %EXPORT_TAGS; 53 54# Items to export into callers namespace by default. Note: do not export 55# names by default without a very good reason. Use EXPORT_OK instead. 56# Do not simply export all your public functions/methods/constants. 57@DEFLATE_CONSTANTS = 58@EXPORT = qw( 59 ZLIB_VERSION 60 ZLIB_VERNUM 61 62 63 OS_CODE 64 65 MAX_MEM_LEVEL 66 MAX_WBITS 67 68 Z_ASCII 69 Z_BEST_COMPRESSION 70 Z_BEST_SPEED 71 Z_BINARY 72 Z_BLOCK 73 Z_BUF_ERROR 74 Z_DATA_ERROR 75 Z_DEFAULT_COMPRESSION 76 Z_DEFAULT_STRATEGY 77 Z_DEFLATED 78 Z_ERRNO 79 Z_FILTERED 80 Z_FIXED 81 Z_FINISH 82 Z_FULL_FLUSH 83 Z_HUFFMAN_ONLY 84 Z_MEM_ERROR 85 Z_NEED_DICT 86 Z_NO_COMPRESSION 87 Z_NO_FLUSH 88 Z_NULL 89 Z_OK 90 Z_PARTIAL_FLUSH 91 Z_RLE 92 Z_STREAM_END 93 Z_STREAM_ERROR 94 Z_SYNC_FLUSH 95 Z_TREES 96 Z_UNKNOWN 97 Z_VERSION_ERROR 98 99 WANT_GZIP 100 WANT_GZIP_OR_ZLIB 101); 102 103push @EXPORT, qw(crc32 adler32 DEF_WBITS); 104 105use constant WANT_GZIP => 16; 106use constant WANT_GZIP_OR_ZLIB => 32; 107 108sub AUTOLOAD { 109 my($constname); 110 ($constname = $AUTOLOAD) =~ s/.*:://; 111 my ($error, $val) = constant($constname); 112 Carp::croak $error if $error; 113 no strict 'refs'; 114 *{$AUTOLOAD} = sub { $val }; 115 goto &{$AUTOLOAD}; 116} 117 118use constant FLAG_APPEND => 1 ; 119use constant FLAG_CRC => 2 ; 120use constant FLAG_ADLER => 4 ; 121use constant FLAG_CONSUME_INPUT => 8 ; 122use constant FLAG_LIMIT_OUTPUT => 16 ; 123 124eval { 125 require XSLoader; 126 XSLoader::load('Compress::Raw::Zlib', $XS_VERSION); 127 1; 128} 129or do { 130 require DynaLoader; 131 local @ISA = qw(DynaLoader); 132 bootstrap Compress::Raw::Zlib $XS_VERSION ; 133}; 134 135 136use constant Parse_any => 0x01; 137use constant Parse_unsigned => 0x02; 138use constant Parse_signed => 0x04; 139use constant Parse_boolean => 0x08; 140#use constant Parse_string => 0x10; 141#use constant Parse_custom => 0x12; 142 143#use constant Parse_store_ref => 0x100 ; 144 145use constant OFF_PARSED => 0 ; 146use constant OFF_TYPE => 1 ; 147use constant OFF_DEFAULT => 2 ; 148use constant OFF_FIXED => 3 ; 149use constant OFF_FIRST_ONLY => 4 ; 150use constant OFF_STICKY => 5 ; 151 152 153 154sub ParseParameters 155{ 156 my $level = shift || 0 ; 157 158 my $sub = (caller($level + 1))[3] ; 159 #local $Carp::CarpLevel = 1 ; 160 my $p = new Compress::Raw::Zlib::Parameters() ; 161 $p->parse(@_) 162 or croak "$sub: $p->{Error}" ; 163 164 return $p; 165} 166 167 168sub Compress::Raw::Zlib::Parameters::new 169{ 170 my $class = shift ; 171 172 my $obj = { Error => '', 173 Got => {}, 174 } ; 175 176 #return bless $obj, ref($class) || $class || __PACKAGE__ ; 177 return bless $obj, 'Compress::Raw::Zlib::Parameters' ; 178} 179 180sub Compress::Raw::Zlib::Parameters::setError 181{ 182 my $self = shift ; 183 my $error = shift ; 184 my $retval = @_ ? shift : undef ; 185 186 $self->{Error} = $error ; 187 return $retval; 188} 189 190#sub getError 191#{ 192# my $self = shift ; 193# return $self->{Error} ; 194#} 195 196sub Compress::Raw::Zlib::Parameters::parse 197{ 198 my $self = shift ; 199 200 my $default = shift ; 201 202 my $got = $self->{Got} ; 203 my $firstTime = keys %{ $got } == 0 ; 204 205 my (@Bad) ; 206 my @entered = () ; 207 208 # Allow the options to be passed as a hash reference or 209 # as the complete hash. 210 if (@_ == 0) { 211 @entered = () ; 212 } 213 elsif (@_ == 1) { 214 my $href = $_[0] ; 215 return $self->setError("Expected even number of parameters, got 1") 216 if ! defined $href or ! ref $href or ref $href ne "HASH" ; 217 218 foreach my $key (keys %$href) { 219 push @entered, $key ; 220 push @entered, \$href->{$key} ; 221 } 222 } 223 else { 224 my $count = @_; 225 return $self->setError("Expected even number of parameters, got $count") 226 if $count % 2 != 0 ; 227 228 for my $i (0.. $count / 2 - 1) { 229 push @entered, $_[2* $i] ; 230 push @entered, \$_[2* $i+1] ; 231 } 232 } 233 234 235 while (my ($key, $v) = each %$default) 236 { 237 croak "need 4 params [@$v]" 238 if @$v != 4 ; 239 240 my ($first_only, $sticky, $type, $value) = @$v ; 241 my $x ; 242 $self->_checkType($key, \$value, $type, 0, \$x) 243 or return undef ; 244 245 $key = lc $key; 246 247 if ($firstTime || ! $sticky) { 248 $got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ; 249 } 250 251 $got->{$key}[OFF_PARSED] = 0 ; 252 } 253 254 for my $i (0.. @entered / 2 - 1) { 255 my $key = $entered[2* $i] ; 256 my $value = $entered[2* $i+1] ; 257 258 #print "Key [$key] Value [$value]" ; 259 #print defined $$value ? "[$$value]\n" : "[undef]\n"; 260 261 $key =~ s/^-// ; 262 my $canonkey = lc $key; 263 264 if ($got->{$canonkey} && ($firstTime || 265 ! $got->{$canonkey}[OFF_FIRST_ONLY] )) 266 { 267 my $type = $got->{$canonkey}[OFF_TYPE] ; 268 my $s ; 269 $self->_checkType($key, $value, $type, 1, \$s) 270 or return undef ; 271 #$value = $$value unless $type & Parse_store_ref ; 272 $value = $$value ; 273 $got->{$canonkey} = [1, $type, $value, $s] ; 274 } 275 else 276 { push (@Bad, $key) } 277 } 278 279 if (@Bad) { 280 my ($bad) = join(", ", @Bad) ; 281 return $self->setError("unknown key value(s) @Bad") ; 282 } 283 284 return 1; 285} 286 287sub Compress::Raw::Zlib::Parameters::_checkType 288{ 289 my $self = shift ; 290 291 my $key = shift ; 292 my $value = shift ; 293 my $type = shift ; 294 my $validate = shift ; 295 my $output = shift; 296 297 #local $Carp::CarpLevel = $level ; 298 #print "PARSE $type $key $value $validate $sub\n" ; 299# if ( $type & Parse_store_ref) 300# { 301# #$value = $$value 302# # if ref ${ $value } ; 303# 304# $$output = $value ; 305# return 1; 306# } 307 308 $value = $$value ; 309 310 if ($type & Parse_any) 311 { 312 $$output = $value ; 313 return 1; 314 } 315 elsif ($type & Parse_unsigned) 316 { 317 return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'") 318 if $validate && ! defined $value ; 319 return $self->setError("Parameter '$key' must be an unsigned int, got '$value'") 320 if $validate && $value !~ /^\d+$/; 321 322 $$output = defined $value ? $value : 0 ; 323 return 1; 324 } 325 elsif ($type & Parse_signed) 326 { 327 return $self->setError("Parameter '$key' must be a signed int, got 'undef'") 328 if $validate && ! defined $value ; 329 return $self->setError("Parameter '$key' must be a signed int, got '$value'") 330 if $validate && $value !~ /^-?\d+$/; 331 332 $$output = defined $value ? $value : 0 ; 333 return 1 ; 334 } 335 elsif ($type & Parse_boolean) 336 { 337 return $self->setError("Parameter '$key' must be an int, got '$value'") 338 if $validate && defined $value && $value !~ /^\d*$/; 339 $$output = defined $value ? $value != 0 : 0 ; 340 return 1; 341 } 342# elsif ($type & Parse_string) 343# { 344# $$output = defined $value ? $value : "" ; 345# return 1; 346# } 347 348 $$output = $value ; 349 return 1; 350} 351 352 353 354sub Compress::Raw::Zlib::Parameters::parsed 355{ 356 my $self = shift ; 357 my $name = shift ; 358 359 return $self->{Got}{lc $name}[OFF_PARSED] ; 360} 361 362sub Compress::Raw::Zlib::Parameters::value 363{ 364 my $self = shift ; 365 my $name = shift ; 366 367 if (@_) 368 { 369 $self->{Got}{lc $name}[OFF_PARSED] = 1; 370 $self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ; 371 $self->{Got}{lc $name}[OFF_FIXED] = $_[0] ; 372 } 373 374 return $self->{Got}{lc $name}[OFF_FIXED] ; 375} 376 377our $OPTIONS_deflate = 378 { 379 'AppendOutput' => [1, 1, Parse_boolean, 0], 380 'CRC32' => [1, 1, Parse_boolean, 0], 381 'ADLER32' => [1, 1, Parse_boolean, 0], 382 'Bufsize' => [1, 1, Parse_unsigned, 4096], 383 384 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 385 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 386 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 387 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()], 388 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], 389 'Dictionary' => [1, 1, Parse_any, ""], 390 }; 391 392sub Compress::Raw::Zlib::Deflate::new 393{ 394 my $pkg = shift ; 395 my ($got) = ParseParameters(0, $OPTIONS_deflate, @_); 396 397 croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " . 398 $got->value('Bufsize') 399 unless $got->value('Bufsize') >= 1; 400 401 my $flags = 0 ; 402 $flags |= FLAG_APPEND if $got->value('AppendOutput') ; 403 $flags |= FLAG_CRC if $got->value('CRC32') ; 404 $flags |= FLAG_ADLER if $got->value('ADLER32') ; 405 406 my $windowBits = $got->value('WindowBits'); 407 $windowBits += MAX_WBITS() 408 if ($windowBits & MAX_WBITS()) == 0 ; 409 410 _deflateInit($flags, 411 $got->value('Level'), 412 $got->value('Method'), 413 $windowBits, 414 $got->value('MemLevel'), 415 $got->value('Strategy'), 416 $got->value('Bufsize'), 417 $got->value('Dictionary')) ; 418 419} 420 421sub Compress::Raw::Zlib::deflateStream::STORABLE_freeze 422{ 423 my $type = ref shift; 424 croak "Cannot freeze $type object\n"; 425} 426 427sub Compress::Raw::Zlib::deflateStream::STORABLE_thaw 428{ 429 my $type = ref shift; 430 croak "Cannot thaw $type object\n"; 431} 432 433 434our $OPTIONS_inflate = 435 { 436 'AppendOutput' => [1, 1, Parse_boolean, 0], 437 'LimitOutput' => [1, 1, Parse_boolean, 0], 438 'CRC32' => [1, 1, Parse_boolean, 0], 439 'ADLER32' => [1, 1, Parse_boolean, 0], 440 'ConsumeInput' => [1, 1, Parse_boolean, 1], 441 'Bufsize' => [1, 1, Parse_unsigned, 4096], 442 443 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 444 'Dictionary' => [1, 1, Parse_any, ""], 445 } ; 446 447sub Compress::Raw::Zlib::Inflate::new 448{ 449 my $pkg = shift ; 450 my ($got) = ParseParameters(0, $OPTIONS_inflate, @_); 451 452 croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " . 453 $got->value('Bufsize') 454 unless $got->value('Bufsize') >= 1; 455 456 my $flags = 0 ; 457 $flags |= FLAG_APPEND if $got->value('AppendOutput') ; 458 $flags |= FLAG_CRC if $got->value('CRC32') ; 459 $flags |= FLAG_ADLER if $got->value('ADLER32') ; 460 $flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ; 461 $flags |= FLAG_LIMIT_OUTPUT if $got->value('LimitOutput') ; 462 463 464 my $windowBits = $got->value('WindowBits'); 465 $windowBits += MAX_WBITS() 466 if ($windowBits & MAX_WBITS()) == 0 ; 467 468 _inflateInit($flags, $windowBits, $got->value('Bufsize'), 469 $got->value('Dictionary')) ; 470} 471 472sub Compress::Raw::Zlib::inflateStream::STORABLE_freeze 473{ 474 my $type = ref shift; 475 croak "Cannot freeze $type object\n"; 476} 477 478sub Compress::Raw::Zlib::inflateStream::STORABLE_thaw 479{ 480 my $type = ref shift; 481 croak "Cannot thaw $type object\n"; 482} 483 484sub Compress::Raw::Zlib::InflateScan::new 485{ 486 my $pkg = shift ; 487 my ($got) = ParseParameters(0, 488 { 489 'CRC32' => [1, 1, Parse_boolean, 0], 490 'ADLER32' => [1, 1, Parse_boolean, 0], 491 'Bufsize' => [1, 1, Parse_unsigned, 4096], 492 493 'WindowBits' => [1, 1, Parse_signed, -MAX_WBITS()], 494 'Dictionary' => [1, 1, Parse_any, ""], 495 }, @_) ; 496 497 498 croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " . 499 $got->value('Bufsize') 500 unless $got->value('Bufsize') >= 1; 501 502 my $flags = 0 ; 503 #$flags |= FLAG_APPEND if $got->value('AppendOutput') ; 504 $flags |= FLAG_CRC if $got->value('CRC32') ; 505 $flags |= FLAG_ADLER if $got->value('ADLER32') ; 506 #$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ; 507 508 _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'), 509 '') ; 510} 511 512sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream 513{ 514 my $pkg = shift ; 515 my ($got) = ParseParameters(0, 516 { 517 'AppendOutput' => [1, 1, Parse_boolean, 0], 518 'CRC32' => [1, 1, Parse_boolean, 0], 519 'ADLER32' => [1, 1, Parse_boolean, 0], 520 'Bufsize' => [1, 1, Parse_unsigned, 4096], 521 522 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 523 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 524 'WindowBits' => [1, 1, Parse_signed, - MAX_WBITS()], 525 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()], 526 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], 527 }, @_) ; 528 529 croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " . 530 $got->value('Bufsize') 531 unless $got->value('Bufsize') >= 1; 532 533 my $flags = 0 ; 534 $flags |= FLAG_APPEND if $got->value('AppendOutput') ; 535 $flags |= FLAG_CRC if $got->value('CRC32') ; 536 $flags |= FLAG_ADLER if $got->value('ADLER32') ; 537 538 $pkg->_createDeflateStream($flags, 539 $got->value('Level'), 540 $got->value('Method'), 541 $got->value('WindowBits'), 542 $got->value('MemLevel'), 543 $got->value('Strategy'), 544 $got->value('Bufsize'), 545 ) ; 546 547} 548 549sub Compress::Raw::Zlib::inflateScanStream::inflate 550{ 551 my $self = shift ; 552 my $buffer = $_[1]; 553 my $eof = $_[2]; 554 555 my $status = $self->scan(@_); 556 557 if ($status == Z_OK() && $_[2]) { 558 my $byte = ' '; 559 560 $status = $self->scan(\$byte, $_[1]) ; 561 } 562 563 return $status ; 564} 565 566sub Compress::Raw::Zlib::deflateStream::deflateParams 567{ 568 my $self = shift ; 569 my ($got) = ParseParameters(0, { 570 'Level' => [1, 1, Parse_signed, undef], 571 'Strategy' => [1, 1, Parse_unsigned, undef], 572 'Bufsize' => [1, 1, Parse_unsigned, undef], 573 }, 574 @_) ; 575 576 croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy" 577 unless $got->parsed('Level') + $got->parsed('Strategy') + 578 $got->parsed('Bufsize'); 579 580 croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " . 581 $got->value('Bufsize') 582 if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1; 583 584 my $flags = 0; 585 $flags |= 1 if $got->parsed('Level') ; 586 $flags |= 2 if $got->parsed('Strategy') ; 587 $flags |= 4 if $got->parsed('Bufsize') ; 588 589 $self->_deflateParams($flags, $got->value('Level'), 590 $got->value('Strategy'), $got->value('Bufsize')); 591 592} 593 594 5951; 596__END__ 597 598 599=head1 NAME 600 601Compress::Raw::Zlib - Low-Level Interface to zlib compression library 602 603=head1 SYNOPSIS 604 605 use Compress::Raw::Zlib ; 606 607 ($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) ; 608 $status = $d->deflate($input, $output) ; 609 $status = $d->flush($output [, $flush_type]) ; 610 $d->deflateReset() ; 611 $d->deflateParams(OPTS) ; 612 $d->deflateTune(OPTS) ; 613 $d->dict_adler() ; 614 $d->crc32() ; 615 $d->adler32() ; 616 $d->total_in() ; 617 $d->total_out() ; 618 $d->msg() ; 619 $d->get_Strategy(); 620 $d->get_Level(); 621 $d->get_BufSize(); 622 623 ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) ; 624 $status = $i->inflate($input, $output [, $eof]) ; 625 $status = $i->inflateSync($input) ; 626 $i->inflateReset() ; 627 $i->dict_adler() ; 628 $d->crc32() ; 629 $d->adler32() ; 630 $i->total_in() ; 631 $i->total_out() ; 632 $i->msg() ; 633 $d->get_BufSize(); 634 635 $crc = adler32($buffer [,$crc]) ; 636 $crc = crc32($buffer [,$crc]) ; 637 638 $crc = crc32_combine($crc1, $crc2, $len2); 639 $adler = adler32_combine($adler1, $adler2, $len2); 640 641 my $version = Compress::Raw::Zlib::zlib_version(); 642 my $flags = Compress::Raw::Zlib::zlibCompileFlags(); 643 644=head1 DESCRIPTION 645 646The I<Compress::Raw::Zlib> module provides a Perl interface to the I<zlib> 647compression library (see L</AUTHOR> for details about where to get 648I<zlib>). 649 650=head1 Compress::Raw::Zlib::Deflate 651 652This section defines an interface that allows in-memory compression using 653the I<deflate> interface provided by zlib. 654 655Here is a definition of the interface available: 656 657=head2 B<($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) > 658 659Initialises a deflation object. 660 661If you are familiar with the I<zlib> library, it combines the 662features of the I<zlib> functions C<deflateInit>, C<deflateInit2> 663and C<deflateSetDictionary>. 664 665If successful, it will return the initialised deflation object, C<$d> 666and a C<$status> of C<Z_OK> in a list context. In scalar context it 667returns the deflation object, C<$d>, only. 668 669If not successful, the returned deflation object, C<$d>, will be 670I<undef> and C<$status> will hold the a I<zlib> error code. 671 672The function optionally takes a number of named options specified as 673C<< Name => value >> pairs. This allows individual options to be 674tailored without having to specify them all in the parameter list. 675 676For backward compatibility, it is also possible to pass the parameters 677as a reference to a hash containing the name=>value pairs. 678 679Below is a list of the valid options: 680 681=over 5 682 683=item B<-Level> 684 685Defines the compression level. Valid values are 0 through 9, 686C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and 687C<Z_DEFAULT_COMPRESSION>. 688 689The default is C<Z_DEFAULT_COMPRESSION>. 690 691=item B<-Method> 692 693Defines the compression method. The only valid value at present (and 694the default) is C<Z_DEFLATED>. 695 696=item B<-WindowBits> 697 698To compress an RFC 1950 data stream, set C<WindowBits> to a positive 699number between 8 and 15. 700 701To compress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>. 702 703To compress an RFC 1952 data stream (i.e. gzip), set C<WindowBits> to 704C<WANT_GZIP>. 705 706For a definition of the meaning and valid values for C<WindowBits> 707refer to the I<zlib> documentation for I<deflateInit2>. 708 709Defaults to C<MAX_WBITS>. 710 711=item B<-MemLevel> 712 713For a definition of the meaning and valid values for C<MemLevel> 714refer to the I<zlib> documentation for I<deflateInit2>. 715 716Defaults to MAX_MEM_LEVEL. 717 718=item B<-Strategy> 719 720Defines the strategy used to tune the compression. The valid values are 721C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED>, C<Z_RLE>, C<Z_FIXED> and 722C<Z_HUFFMAN_ONLY>. 723 724The default is C<Z_DEFAULT_STRATEGY>. 725 726=item B<-Dictionary> 727 728When a dictionary is specified I<Compress::Raw::Zlib> will automatically 729call C<deflateSetDictionary> directly after calling C<deflateInit>. The 730Adler32 value for the dictionary can be obtained by calling the method 731C<$d-E<gt>dict_adler()>. 732 733The default is no dictionary. 734 735=item B<-Bufsize> 736 737Sets the initial size for the output buffer used by the C<$d-E<gt>deflate> 738and C<$d-E<gt>flush> methods. If the buffer has to be 739reallocated to increase the size, it will grow in increments of 740C<Bufsize>. 741 742The default buffer size is 4096. 743 744=item B<-AppendOutput> 745 746This option controls how data is written to the output buffer by the 747C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods. 748 749If the C<AppendOutput> option is set to false, the output buffers in the 750C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods will be truncated before 751uncompressed data is written to them. 752 753If the option is set to true, uncompressed data will be appended to the 754output buffer in the C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods. 755 756This option defaults to false. 757 758=item B<-CRC32> 759 760If set to true, a crc32 checksum of the uncompressed data will be 761calculated. Use the C<$d-E<gt>crc32> method to retrieve this value. 762 763This option defaults to false. 764 765=item B<-ADLER32> 766 767If set to true, an adler32 checksum of the uncompressed data will be 768calculated. Use the C<$d-E<gt>adler32> method to retrieve this value. 769 770This option defaults to false. 771 772=back 773 774Here is an example of using the C<Compress::Raw::Zlib::Deflate> optional 775parameter list to override the default buffer size and compression 776level. All other options will take their default values. 777 778 my $d = new Compress::Raw::Zlib::Deflate ( -Bufsize => 300, 779 -Level => Z_BEST_SPEED ) ; 780 781=head2 B<$status = $d-E<gt>deflate($input, $output)> 782 783Deflates the contents of C<$input> and writes the compressed data to 784C<$output>. 785 786The C<$input> and C<$output> parameters can be either scalars or scalar 787references. 788 789When finished, C<$input> will be completely processed (assuming there 790were no errors). If the deflation was successful it writes the deflated 791data to C<$output> and returns a status value of C<Z_OK>. 792 793On error, it returns a I<zlib> error code. 794 795If the C<AppendOutput> option is set to true in the constructor for 796the C<$d> object, the compressed data will be appended to C<$output>. If 797it is false, C<$output> will be truncated before any compressed data is 798written to it. 799 800B<Note>: This method will not necessarily write compressed data to 801C<$output> every time it is called. So do not assume that there has been 802an error if the contents of C<$output> is empty on returning from 803this method. As long as the return code from the method is C<Z_OK>, 804the deflate has succeeded. 805 806=head2 B<$status = $d-E<gt>flush($output [, $flush_type]) > 807 808Typically used to finish the deflation. Any pending output will be 809written to C<$output>. 810 811Returns C<Z_OK> if successful. 812 813Note that flushing can seriously degrade the compression ratio, so it 814should only be used to terminate a decompression (using C<Z_FINISH>) or 815when you want to create a I<full flush point> (using C<Z_FULL_FLUSH>). 816 817By default the C<flush_type> used is C<Z_FINISH>. Other valid values 818for C<flush_type> are C<Z_NO_FLUSH>, C<Z_PARTIAL_FLUSH>, C<Z_SYNC_FLUSH> 819and C<Z_FULL_FLUSH>. It is strongly recommended that you only set the 820C<flush_type> parameter if you fully understand the implications of 821what it does. See the C<zlib> documentation for details. 822 823If the C<AppendOutput> option is set to true in the constructor for 824the C<$d> object, the compressed data will be appended to C<$output>. If 825it is false, C<$output> will be truncated before any compressed data is 826written to it. 827 828=head2 B<$status = $d-E<gt>deflateReset() > 829 830This method will reset the deflation object C<$d>. It can be used when you 831are compressing multiple data streams and want to use the same object to 832compress each of them. It should only be used once the previous data stream 833has been flushed successfully, i.e. a call to C<< $d->flush(Z_FINISH) >> has 834returned C<Z_OK>. 835 836Returns C<Z_OK> if successful. 837 838=head2 B<$status = $d-E<gt>deflateParams([OPT])> 839 840Change settings for the deflate object C<$d>. 841 842The list of the valid options is shown below. Options not specified 843will remain unchanged. 844 845=over 5 846 847=item B<-Level> 848 849Defines the compression level. Valid values are 0 through 9, 850C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and 851C<Z_DEFAULT_COMPRESSION>. 852 853=item B<-Strategy> 854 855Defines the strategy used to tune the compression. The valid values are 856C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>. 857 858=item B<-BufSize> 859 860Sets the initial size for the output buffer used by the C<$d-E<gt>deflate> 861and C<$d-E<gt>flush> methods. If the buffer has to be 862reallocated to increase the size, it will grow in increments of 863C<Bufsize>. 864 865=back 866 867=head2 B<$status = $d-E<gt>deflateTune($good_length, $max_lazy, $nice_length, $max_chain)> 868 869Tune the internal settings for the deflate object C<$d>. This option is 870only available if you are running zlib 1.2.2.3 or better. 871 872Refer to the documentation in zlib.h for instructions on how to fly 873C<deflateTune>. 874 875=head2 B<$d-E<gt>dict_adler()> 876 877Returns the adler32 value for the dictionary. 878 879=head2 B<$d-E<gt>crc32()> 880 881Returns the crc32 value for the uncompressed data to date. 882 883If the C<CRC32> option is not enabled in the constructor for this object, 884this method will always return 0; 885 886=head2 B<$d-E<gt>adler32()> 887 888Returns the adler32 value for the uncompressed data to date. 889 890=head2 B<$d-E<gt>msg()> 891 892Returns the last error message generated by zlib. 893 894=head2 B<$d-E<gt>total_in()> 895 896Returns the total number of bytes uncompressed bytes input to deflate. 897 898=head2 B<$d-E<gt>total_out()> 899 900Returns the total number of compressed bytes output from deflate. 901 902=head2 B<$d-E<gt>get_Strategy()> 903 904Returns the deflation strategy currently used. Valid values are 905C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>. 906 907=head2 B<$d-E<gt>get_Level()> 908 909Returns the compression level being used. 910 911=head2 B<$d-E<gt>get_BufSize()> 912 913Returns the buffer size used to carry out the compression. 914 915=head2 Example 916 917Here is a trivial example of using C<deflate>. It simply reads standard 918input, deflates it and writes it to standard output. 919 920 use strict ; 921 use warnings ; 922 923 use Compress::Raw::Zlib ; 924 925 binmode STDIN; 926 binmode STDOUT; 927 my $x = new Compress::Raw::Zlib::Deflate 928 or die "Cannot create a deflation stream\n" ; 929 930 my ($output, $status) ; 931 while (<>) 932 { 933 $status = $x->deflate($_, $output) ; 934 935 $status == Z_OK 936 or die "deflation failed\n" ; 937 938 print $output ; 939 } 940 941 $status = $x->flush($output) ; 942 943 $status == Z_OK 944 or die "deflation failed\n" ; 945 946 print $output ; 947 948=head1 Compress::Raw::Zlib::Inflate 949 950This section defines an interface that allows in-memory uncompression using 951the I<inflate> interface provided by zlib. 952 953Here is a definition of the interface: 954 955=head2 B< ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) > 956 957Initialises an inflation object. 958 959In a list context it returns the inflation object, C<$i>, and the 960I<zlib> status code (C<$status>). In a scalar context it returns the 961inflation object only. 962 963If successful, C<$i> will hold the inflation object and C<$status> will 964be C<Z_OK>. 965 966If not successful, C<$i> will be I<undef> and C<$status> will hold the 967I<zlib> error code. 968 969The function optionally takes a number of named options specified as 970C<< -Name => value >> pairs. This allows individual options to be 971tailored without having to specify them all in the parameter list. 972 973For backward compatibility, it is also possible to pass the parameters 974as a reference to a hash containing the C<< name=>value >> pairs. 975 976Here is a list of the valid options: 977 978=over 5 979 980=item B<-WindowBits> 981 982To uncompress an RFC 1950 data stream, set C<WindowBits> to a positive 983number between 8 and 15. 984 985To uncompress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>. 986 987To uncompress an RFC 1952 data stream (i.e. gzip), set C<WindowBits> to 988C<WANT_GZIP>. 989 990To auto-detect and uncompress an RFC 1950 or RFC 1952 data stream (i.e. 991gzip), set C<WindowBits> to C<WANT_GZIP_OR_ZLIB>. 992 993For a full definition of the meaning and valid values for C<WindowBits> 994refer to the I<zlib> documentation for I<inflateInit2>. 995 996Defaults to C<MAX_WBITS>. 997 998=item B<-Bufsize> 999 1000Sets the initial size for the output buffer used by the C<$i-E<gt>inflate> 1001method. If the output buffer in this method has to be reallocated to 1002increase the size, it will grow in increments of C<Bufsize>. 1003 1004Default is 4096. 1005 1006=item B<-Dictionary> 1007 1008The default is no dictionary. 1009 1010=item B<-AppendOutput> 1011 1012This option controls how data is written to the output buffer by the 1013C<$i-E<gt>inflate> method. 1014 1015If the option is set to false, the output buffer in the C<$i-E<gt>inflate> 1016method will be truncated before uncompressed data is written to it. 1017 1018If the option is set to true, uncompressed data will be appended to the 1019output buffer by the C<$i-E<gt>inflate> method. 1020 1021This option defaults to false. 1022 1023=item B<-CRC32> 1024 1025If set to true, a crc32 checksum of the uncompressed data will be 1026calculated. Use the C<$i-E<gt>crc32> method to retrieve this value. 1027 1028This option defaults to false. 1029 1030=item B<-ADLER32> 1031 1032If set to true, an adler32 checksum of the uncompressed data will be 1033calculated. Use the C<$i-E<gt>adler32> method to retrieve this value. 1034 1035This option defaults to false. 1036 1037=item B<-ConsumeInput> 1038 1039If set to true, this option will remove compressed data from the input 1040buffer of the C<< $i->inflate >> method as the inflate progresses. 1041 1042This option can be useful when you are processing compressed data that is 1043embedded in another file/buffer. In this case the data that immediately 1044follows the compressed stream will be left in the input buffer. 1045 1046This option defaults to true. 1047 1048=item B<-LimitOutput> 1049 1050The C<LimitOutput> option changes the behavior of the C<< $i->inflate >> 1051method so that the amount of memory used by the output buffer can be 1052limited. 1053 1054When C<LimitOutput> is used the size of the output buffer used will either 1055be the value of the C<Bufsize> option or the amount of memory already 1056allocated to C<$output>, whichever is larger. Predicting the output size 1057available is tricky, so don't rely on getting an exact output buffer size. 1058 1059When C<LimitOutout> is not specified C<< $i->inflate >> will use as much 1060memory as it takes to write all the uncompressed data it creates by 1061uncompressing the input buffer. 1062 1063If C<LimitOutput> is enabled, the C<ConsumeInput> option will also be 1064enabled. 1065 1066This option defaults to false. 1067 1068See L</The LimitOutput option> for a discussion on why C<LimitOutput> is 1069needed and how to use it. 1070 1071=back 1072 1073Here is an example of using an optional parameter to override the default 1074buffer size. 1075 1076 my ($i, $status) = new Compress::Raw::Zlib::Inflate( -Bufsize => 300 ) ; 1077 1078=head2 B< $status = $i-E<gt>inflate($input, $output [,$eof]) > 1079 1080Inflates the complete contents of C<$input> and writes the uncompressed 1081data to C<$output>. The C<$input> and C<$output> parameters can either be 1082scalars or scalar references. 1083 1084Returns C<Z_OK> if successful and C<Z_STREAM_END> if the end of the 1085compressed data has been successfully reached. 1086 1087If not successful C<$status> will hold the I<zlib> error code. 1088 1089If the C<ConsumeInput> option has been set to true when the 1090C<Compress::Raw::Zlib::Inflate> object is created, the C<$input> parameter 1091is modified by C<inflate>. On completion it will contain what remains 1092of the input buffer after inflation. In practice, this means that when 1093the return status is C<Z_OK> the C<$input> parameter will contain an 1094empty string, and when the return status is C<Z_STREAM_END> the C<$input> 1095parameter will contains what (if anything) was stored in the input buffer 1096after the deflated data stream. 1097 1098This feature is useful when processing a file format that encapsulates 1099a compressed data stream (e.g. gzip, zip) and there is useful data 1100immediately after the deflation stream. 1101 1102If the C<AppendOutput> option is set to true in the constructor for 1103this object, the uncompressed data will be appended to C<$output>. If 1104it is false, C<$output> will be truncated before any uncompressed data 1105is written to it. 1106 1107The C<$eof> parameter needs a bit of explanation. 1108 1109Prior to version 1.2.0, zlib assumed that there was at least one trailing 1110byte immediately after the compressed data stream when it was carrying out 1111decompression. This normally isn't a problem because the majority of zlib 1112applications guarantee that there will be data directly after the 1113compressed data stream. For example, both gzip (RFC 1950) and zip both 1114define trailing data that follows the compressed data stream. 1115 1116The C<$eof> parameter only needs to be used if B<all> of the following 1117conditions apply 1118 1119=over 5 1120 1121=item 1 1122 1123You are either using a copy of zlib that is older than version 1.2.0 or you 1124want your application code to be able to run with as many different 1125versions of zlib as possible. 1126 1127=item 2 1128 1129You have set the C<WindowBits> parameter to C<-MAX_WBITS> in the constructor 1130for this object, i.e. you are uncompressing a raw deflated data stream 1131(RFC 1951). 1132 1133=item 3 1134 1135There is no data immediately after the compressed data stream. 1136 1137=back 1138 1139If B<all> of these are the case, then you need to set the C<$eof> parameter 1140to true on the final call (and only the final call) to C<$i-E<gt>inflate>. 1141 1142If you have built this module with zlib >= 1.2.0, the C<$eof> parameter is 1143ignored. You can still set it if you want, but it won't be used behind the 1144scenes. 1145 1146=head2 B<$status = $i-E<gt>inflateSync($input)> 1147 1148This method can be used to attempt to recover good data from a compressed 1149data stream that is partially corrupt. 1150It scans C<$input> until it reaches either a I<full flush point> or the 1151end of the buffer. 1152 1153If a I<full flush point> is found, C<Z_OK> is returned and C<$input> 1154will be have all data up to the flush point removed. This data can then be 1155passed to the C<$i-E<gt>inflate> method to be uncompressed. 1156 1157Any other return code means that a flush point was not found. If more 1158data is available, C<inflateSync> can be called repeatedly with more 1159compressed data until the flush point is found. 1160 1161Note I<full flush points> are not present by default in compressed 1162data streams. They must have been added explicitly when the data stream 1163was created by calling C<Compress::Deflate::flush> with C<Z_FULL_FLUSH>. 1164 1165=head2 B<$status = $i-E<gt>inflateReset() > 1166 1167This method will reset the inflation object C<$i>. It can be used when you 1168are uncompressing multiple data streams and want to use the same object to 1169uncompress each of them. 1170 1171Returns C<Z_OK> if successful. 1172 1173=head2 B<$i-E<gt>dict_adler()> 1174 1175Returns the adler32 value for the dictionary. 1176 1177=head2 B<$i-E<gt>crc32()> 1178 1179Returns the crc32 value for the uncompressed data to date. 1180 1181If the C<CRC32> option is not enabled in the constructor for this object, 1182this method will always return 0; 1183 1184=head2 B<$i-E<gt>adler32()> 1185 1186Returns the adler32 value for the uncompressed data to date. 1187 1188If the C<ADLER32> option is not enabled in the constructor for this object, 1189this method will always return 0; 1190 1191=head2 B<$i-E<gt>msg()> 1192 1193Returns the last error message generated by zlib. 1194 1195=head2 B<$i-E<gt>total_in()> 1196 1197Returns the total number of bytes compressed bytes input to inflate. 1198 1199=head2 B<$i-E<gt>total_out()> 1200 1201Returns the total number of uncompressed bytes output from inflate. 1202 1203=head2 B<$d-E<gt>get_BufSize()> 1204 1205Returns the buffer size used to carry out the decompression. 1206 1207=head2 Examples 1208 1209Here is an example of using C<inflate>. 1210 1211 use strict ; 1212 use warnings ; 1213 1214 use Compress::Raw::Zlib; 1215 1216 my $x = new Compress::Raw::Zlib::Inflate() 1217 or die "Cannot create a inflation stream\n" ; 1218 1219 my $input = '' ; 1220 binmode STDIN; 1221 binmode STDOUT; 1222 1223 my ($output, $status) ; 1224 while (read(STDIN, $input, 4096)) 1225 { 1226 $status = $x->inflate($input, $output) ; 1227 1228 print $output ; 1229 1230 last if $status != Z_OK ; 1231 } 1232 1233 die "inflation failed\n" 1234 unless $status == Z_STREAM_END ; 1235 1236The next example show how to use the C<LimitOutput> option. Notice the use 1237of two nested loops in this case. The outer loop reads the data from the 1238input source - STDIN and the inner loop repeatedly calls C<inflate> until 1239C<$input> is exhausted, we get an error, or the end of the stream is 1240reached. One point worth remembering is by using the C<LimitOutput> option 1241you also get C<ConsumeInput> set as well - this makes the code below much 1242simpler. 1243 1244 use strict ; 1245 use warnings ; 1246 1247 use Compress::Raw::Zlib; 1248 1249 my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1) 1250 or die "Cannot create a inflation stream\n" ; 1251 1252 my $input = '' ; 1253 binmode STDIN; 1254 binmode STDOUT; 1255 1256 my ($output, $status) ; 1257 1258 OUTER: 1259 while (read(STDIN, $input, 4096)) 1260 { 1261 do 1262 { 1263 $status = $x->inflate($input, $output) ; 1264 1265 print $output ; 1266 1267 last OUTER 1268 unless $status == Z_OK || $status == Z_BUF_ERROR ; 1269 } 1270 while ($status == Z_OK && length $input); 1271 } 1272 1273 die "inflation failed\n" 1274 unless $status == Z_STREAM_END ; 1275 1276=head1 CHECKSUM FUNCTIONS 1277 1278Two functions are provided by I<zlib> to calculate checksums. For the 1279Perl interface, the order of the two parameters in both functions has 1280been reversed. This allows both running checksums and one off 1281calculations to be done. 1282 1283 $crc = adler32($buffer [,$crc]) ; 1284 $crc = crc32($buffer [,$crc]) ; 1285 1286The buffer parameters can either be a scalar or a scalar reference. 1287 1288If the $crc parameters is C<undef>, the crc value will be reset. 1289 1290If you have built this module with zlib 1.2.3 or better, two more 1291CRC-related functions are available. 1292 1293 $crc = crc32_combine($crc1, $crc2, $len2); 1294 $adler = adler32_combine($adler1, $adler2, $len2); 1295 1296These functions allow checksums to be merged. 1297Refer to the I<zlib> documentation for more details. 1298 1299=head1 Misc 1300 1301=head2 my $version = Compress::Raw::Zlib::zlib_version(); 1302 1303Returns the version of the zlib library. 1304 1305=head2 my $flags = Compress::Raw::Zlib::zlibCompileFlags(); 1306 1307Returns the flags indicating compile-time options that were used to build 1308the zlib library. See the zlib documentation for a description of the flags 1309returned by C<zlibCompileFlags>. 1310 1311Note that when the zlib sources are built along with this module the 1312C<sprintf> flags (bits 24, 25 and 26) should be ignored. 1313 1314If you are using zlib 1.2.0 or older, C<zlibCompileFlags> will return 0. 1315 1316=head1 The LimitOutput option. 1317 1318By default C<< $i->inflate($input, $output) >> will uncompress I<all> data 1319in C<$input> and write I<all> of the uncompressed data it has generated to 1320C<$output>. This makes the interface to C<inflate> much simpler - if the 1321method has uncompressed C<$input> successfully I<all> compressed data in 1322C<$input> will have been dealt with. So if you are reading from an input 1323source and uncompressing as you go the code will look something like this 1324 1325 use strict ; 1326 use warnings ; 1327 1328 use Compress::Raw::Zlib; 1329 1330 my $x = new Compress::Raw::Zlib::Inflate() 1331 or die "Cannot create a inflation stream\n" ; 1332 1333 my $input = '' ; 1334 1335 my ($output, $status) ; 1336 while (read(STDIN, $input, 4096)) 1337 { 1338 $status = $x->inflate($input, $output) ; 1339 1340 print $output ; 1341 1342 last if $status != Z_OK ; 1343 } 1344 1345 die "inflation failed\n" 1346 unless $status == Z_STREAM_END ; 1347 1348The points to note are 1349 1350=over 5 1351 1352=item * 1353 1354The main processing loop in the code handles reading of compressed data 1355from STDIN. 1356 1357=item * 1358 1359The status code returned from C<inflate> will only trigger termination of 1360the main processing loop if it isn't C<Z_OK>. When C<LimitOutput> has not 1361been used the C<Z_OK> status means that the end of the compressed 1362data stream has been reached or there has been an error in uncompression. 1363 1364=item * 1365 1366After the call to C<inflate> I<all> of the uncompressed data in C<$input> 1367will have been processed. This means the subsequent call to C<read> can 1368overwrite it's contents without any problem. 1369 1370=back 1371 1372For most use-cases the behavior described above is acceptable (this module 1373and it's predecessor, C<Compress::Zlib>, have used it for over 10 years 1374without an issue), but in a few very specific use-cases the amount of 1375memory required for C<$output> can prohibitively large. For example, if the 1376compressed data stream contains the same pattern repeated thousands of 1377times, a relatively small compressed data stream can uncompress into 1378hundreds of megabytes. Remember C<inflate> will keep allocating memory 1379until I<all> the uncompressed data has been written to the output buffer - 1380the size of C<$output> is unbounded. 1381 1382The C<LimitOutput> option is designed to help with this use-case. 1383 1384The main difference in your code when using C<LimitOutput> is having to 1385deal with cases where the C<$input> parameter still contains some 1386uncompressed data that C<inflate> hasn't processed yet. The status code 1387returned from C<inflate> will be C<Z_OK> if uncompression took place and 1388C<Z_BUF_ERROR> if the output buffer is full. 1389 1390Below is typical code that shows how to use C<LimitOutput>. 1391 1392 use strict ; 1393 use warnings ; 1394 1395 use Compress::Raw::Zlib; 1396 1397 my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1) 1398 or die "Cannot create a inflation stream\n" ; 1399 1400 my $input = '' ; 1401 binmode STDIN; 1402 binmode STDOUT; 1403 1404 my ($output, $status) ; 1405 1406 OUTER: 1407 while (read(STDIN, $input, 4096)) 1408 { 1409 do 1410 { 1411 $status = $x->inflate($input, $output) ; 1412 1413 print $output ; 1414 1415 last OUTER 1416 unless $status == Z_OK || $status == Z_BUF_ERROR ; 1417 } 1418 while ($status == Z_OK && length $input); 1419 } 1420 1421 die "inflation failed\n" 1422 unless $status == Z_STREAM_END ; 1423 1424Points to note this time: 1425 1426=over 5 1427 1428=item * 1429 1430There are now two nested loops in the code: the outer loop for reading the 1431compressed data from STDIN, as before; and the inner loop to carry out the 1432uncompression. 1433 1434=item * 1435 1436There are two exit points from the inner uncompression loop. 1437 1438Firstly when C<inflate> has returned a status other than C<Z_OK> or 1439C<Z_BUF_ERROR>. This means that either the end of the compressed data 1440stream has been reached (C<Z_STREAM_END>) or there is an error in the 1441compressed data. In either of these cases there is no point in continuing 1442with reading the compressed data, so both loops are terminated. 1443 1444The second exit point tests if there is any data left in the input buffer, 1445C<$input> - remember that the C<ConsumeInput> option is automatically 1446enabled when C<LimitOutput> is used. When the input buffer has been 1447exhausted, the outer loop can run again and overwrite a now empty 1448C<$input>. 1449 1450=back 1451 1452=head1 ACCESSING ZIP FILES 1453 1454Although it is possible (with some effort on your part) to use this module 1455to access .zip files, there are other perl modules available that will do 1456all the hard work for you. Check out C<Archive::Zip>, 1457C<Archive::Zip::SimpleZip>, C<IO::Compress::Zip> and 1458C<IO::Uncompress::Unzip>. 1459 1460=head1 FAQ 1461 1462=head2 Compatibility with Unix compress/uncompress. 1463 1464This module is not compatible with Unix C<compress>. 1465 1466If you have the C<uncompress> program available, you can use this to read 1467compressed files 1468 1469 open F, "uncompress -c $filename |"; 1470 while (<F>) 1471 { 1472 ... 1473 1474Alternatively, if you have the C<gunzip> program available, you can use 1475this to read compressed files 1476 1477 open F, "gunzip -c $filename |"; 1478 while (<F>) 1479 { 1480 ... 1481 1482and this to write compress files, if you have the C<compress> program 1483available 1484 1485 open F, "| compress -c $filename "; 1486 print F "data"; 1487 ... 1488 close F ; 1489 1490=head2 Accessing .tar.Z files 1491 1492See previous FAQ item. 1493 1494If the C<Archive::Tar> module is installed and either the C<uncompress> or 1495C<gunzip> programs are available, you can use one of these workarounds to 1496read C<.tar.Z> files. 1497 1498Firstly with C<uncompress> 1499 1500 use strict; 1501 use warnings; 1502 use Archive::Tar; 1503 1504 open F, "uncompress -c $filename |"; 1505 my $tar = Archive::Tar->new(*F); 1506 ... 1507 1508and this with C<gunzip> 1509 1510 use strict; 1511 use warnings; 1512 use Archive::Tar; 1513 1514 open F, "gunzip -c $filename |"; 1515 my $tar = Archive::Tar->new(*F); 1516 ... 1517 1518Similarly, if the C<compress> program is available, you can use this to 1519write a C<.tar.Z> file 1520 1521 use strict; 1522 use warnings; 1523 use Archive::Tar; 1524 use IO::File; 1525 1526 my $fh = new IO::File "| compress -c >$filename"; 1527 my $tar = Archive::Tar->new(); 1528 ... 1529 $tar->write($fh); 1530 $fh->close ; 1531 1532=head2 Zlib Library Version Support 1533 1534By default C<Compress::Raw::Zlib> will build with a private copy of version 15351.2.5 of the zlib library. (See the F<README> file for details of 1536how to override this behaviour) 1537 1538If you decide to use a different version of the zlib library, you need to be 1539aware of the following issues 1540 1541=over 5 1542 1543=item * 1544 1545First off, you must have zlib 1.0.5 or better. 1546 1547=item * 1548 1549You need to have zlib 1.2.1 or better if you want to use the C<-Merge> 1550option with C<IO::Compress::Gzip>, C<IO::Compress::Deflate> and 1551C<IO::Compress::RawDeflate>. 1552 1553=back 1554 1555=head1 CONSTANTS 1556 1557All the I<zlib> constants are automatically imported when you make use 1558of I<Compress::Raw::Zlib>. 1559 1560=head1 SUPPORT 1561 1562General feedback/questions/bug reports should be sent to 1563L<https://github.com/pmqs/Compress-Raw-Zlib/issues> (preferred) or 1564L<https://rt.cpan.org/Public/Dist/Display.html?Name=Compress-Raw-Zlib>. 1565 1566=head1 SEE ALSO 1567 1568L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, 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::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress> 1569 1570L<IO::Compress::FAQ|IO::Compress::FAQ> 1571 1572L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>, 1573L<Archive::Tar|Archive::Tar>, 1574L<IO::Zlib|IO::Zlib> 1575 1576For RFC 1950, 1951 and 1952 see 1577L<http://www.faqs.org/rfcs/rfc1950.html>, 1578L<http://www.faqs.org/rfcs/rfc1951.html> and 1579L<http://www.faqs.org/rfcs/rfc1952.html> 1580 1581The I<zlib> compression library was written by Jean-loup Gailly 1582C<gzip@prep.ai.mit.edu> and Mark Adler C<madler@alumni.caltech.edu>. 1583 1584The primary site for the I<zlib> compression library is 1585L<http://www.zlib.org>. 1586 1587The primary site for gzip is L<http://www.gzip.org>. 1588 1589=head1 AUTHOR 1590 1591This module was written by Paul Marquess, C<pmqs@cpan.org>. 1592 1593=head1 MODIFICATION HISTORY 1594 1595See the Changes file. 1596 1597=head1 COPYRIGHT AND LICENSE 1598 1599Copyright (c) 2005-2019 Paul Marquess. All rights reserved. 1600 1601This program is free software; you can redistribute it and/or 1602modify it under the same terms as Perl itself. 1603 1604