1package IO::Uncompress::AnyUncompress ; 2 3use strict; 4use warnings; 5use bytes; 6 7use IO::Compress::Base::Common 2.048 qw(createSelfTiedObject); 8 9use IO::Uncompress::Base 2.048 ; 10 11 12require Exporter ; 13 14our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyUncompressError); 15 16$VERSION = '2.048'; 17$AnyUncompressError = ''; 18 19@ISA = qw( Exporter IO::Uncompress::Base ); 20@EXPORT_OK = qw( $AnyUncompressError anyuncompress ) ; 21%EXPORT_TAGS = %IO::Uncompress::Base::DEFLATE_CONSTANTS ; 22push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; 23Exporter::export_ok_tags('all'); 24 25# TODO - allow the user to pick a set of the three formats to allow 26# or just assume want to auto-detect any of the three formats. 27 28BEGIN 29{ 30 eval ' use IO::Uncompress::Adapter::Inflate 2.048 ;'; 31 eval ' use IO::Uncompress::Adapter::Bunzip2 2.048 ;'; 32 eval ' use IO::Uncompress::Adapter::LZO 2.048 ;'; 33 eval ' use IO::Uncompress::Adapter::Lzf 2.048 ;'; 34 eval ' use IO::Uncompress::Adapter::UnLzma 2.048 ;'; 35 eval ' use IO::Uncompress::Adapter::UnXz 2.048 ;'; 36 37 eval ' use IO::Uncompress::Bunzip2 2.048 ;'; 38 eval ' use IO::Uncompress::UnLzop 2.048 ;'; 39 eval ' use IO::Uncompress::Gunzip 2.048 ;'; 40 eval ' use IO::Uncompress::Inflate 2.048 ;'; 41 eval ' use IO::Uncompress::RawInflate 2.048 ;'; 42 eval ' use IO::Uncompress::Unzip 2.048 ;'; 43 eval ' use IO::Uncompress::UnLzf 2.048 ;'; 44 eval ' use IO::Uncompress::UnLzma 2.048 ;'; 45 eval ' use IO::Uncompress::UnXz 2.048 ;'; 46} 47 48sub new 49{ 50 my $class = shift ; 51 my $obj = createSelfTiedObject($class, \$AnyUncompressError); 52 $obj->_create(undef, 0, @_); 53} 54 55sub anyuncompress 56{ 57 my $obj = createSelfTiedObject(undef, \$AnyUncompressError); 58 return $obj->_inf(@_) ; 59} 60 61sub getExtraParams 62{ 63 use IO::Compress::Base::Common 2.048 qw(:Parse); 64 return ( 'RawInflate' => [1, 1, Parse_boolean, 0] , 65 'UnLzma' => [1, 1, Parse_boolean, 0] ) ; 66} 67 68sub ckParams 69{ 70 my $self = shift ; 71 my $got = shift ; 72 73 # any always needs both crc32 and adler32 74 $got->value('CRC32' => 1); 75 $got->value('ADLER32' => 1); 76 77 return 1; 78} 79 80sub mkUncomp 81{ 82 my $self = shift ; 83 my $got = shift ; 84 85 my $magic ; 86 87 # try zlib first 88 if (defined $IO::Uncompress::RawInflate::VERSION ) 89 { 90 my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Inflate::mkUncompObject(); 91 92 return $self->saveErrorString(undef, $errstr, $errno) 93 if ! defined $obj; 94 95 *$self->{Uncomp} = $obj; 96 97 my @possible = qw( Inflate Gunzip Unzip ); 98 unshift @possible, 'RawInflate' 99 if $got->value('RawInflate'); 100 101 $magic = $self->ckMagic( @possible ); 102 103 if ($magic) { 104 *$self->{Info} = $self->readHeader($magic) 105 or return undef ; 106 107 return 1; 108 } 109 } 110 111 if (defined $IO::Uncompress::UnLzma::VERSION && $got->value('UnLzma')) 112 { 113 my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::UnLzma::mkUncompObject(); 114 115 return $self->saveErrorString(undef, $errstr, $errno) 116 if ! defined $obj; 117 118 *$self->{Uncomp} = $obj; 119 120 my @possible = qw( UnLzma ); 121 #unshift @possible, 'RawInflate' 122 # if $got->value('RawInflate'); 123 124 if ( *$self->{Info} = $self->ckMagic( @possible )) 125 { 126 return 1; 127 } 128 } 129 130 if (defined $IO::Uncompress::UnXz::VERSION and 131 $magic = $self->ckMagic('UnXz')) { 132 *$self->{Info} = $self->readHeader($magic) 133 or return undef ; 134 135 my ($obj, $errstr, $errno) = 136 IO::Uncompress::Adapter::UnXz::mkUncompObject(); 137 138 return $self->saveErrorString(undef, $errstr, $errno) 139 if ! defined $obj; 140 141 *$self->{Uncomp} = $obj; 142 143 return 1; 144 } 145 146 if (defined $IO::Uncompress::Bunzip2::VERSION and 147 $magic = $self->ckMagic('Bunzip2')) { 148 *$self->{Info} = $self->readHeader($magic) 149 or return undef ; 150 151 my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Bunzip2::mkUncompObject(); 152 153 return $self->saveErrorString(undef, $errstr, $errno) 154 if ! defined $obj; 155 156 *$self->{Uncomp} = $obj; 157 158 return 1; 159 } 160 161 if (defined $IO::Uncompress::UnLzop::VERSION and 162 $magic = $self->ckMagic('UnLzop')) { 163 164 *$self->{Info} = $self->readHeader($magic) 165 or return undef ; 166 167 my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::LZO::mkUncompObject(); 168 169 return $self->saveErrorString(undef, $errstr, $errno) 170 if ! defined $obj; 171 172 *$self->{Uncomp} = $obj; 173 174 return 1; 175 } 176 177 if (defined $IO::Uncompress::UnLzf::VERSION and 178 $magic = $self->ckMagic('UnLzf')) { 179 180 *$self->{Info} = $self->readHeader($magic) 181 or return undef ; 182 183 my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Lzf::mkUncompObject(); 184 185 return $self->saveErrorString(undef, $errstr, $errno) 186 if ! defined $obj; 187 188 *$self->{Uncomp} = $obj; 189 190 return 1; 191 } 192 193 return 0 ; 194} 195 196 197 198sub ckMagic 199{ 200 my $self = shift; 201 my @names = @_ ; 202 203 my $keep = ref $self ; 204 for my $class ( map { "IO::Uncompress::$_" } @names) 205 { 206 bless $self => $class; 207 my $magic = $self->ckMagic(); 208 209 if ($magic) 210 { 211 #bless $self => $class; 212 return $magic ; 213 } 214 215 $self->pushBack(*$self->{HeaderPending}) ; 216 *$self->{HeaderPending} = '' ; 217 } 218 219 bless $self => $keep; 220 return undef; 221} 222 2231 ; 224 225__END__ 226 227 228=head1 NAME 229 230IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2 or lzop file/buffer 231 232=head1 SYNOPSIS 233 234 use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ; 235 236 my $status = anyuncompress $input => $output [,OPTS] 237 or die "anyuncompress failed: $AnyUncompressError\n"; 238 239 my $z = new IO::Uncompress::AnyUncompress $input [OPTS] 240 or die "anyuncompress failed: $AnyUncompressError\n"; 241 242 $status = $z->read($buffer) 243 $status = $z->read($buffer, $length) 244 $status = $z->read($buffer, $length, $offset) 245 $line = $z->getline() 246 $char = $z->getc() 247 $char = $z->ungetc() 248 $char = $z->opened() 249 250 $data = $z->trailingData() 251 $status = $z->nextStream() 252 $data = $z->getHeaderInfo() 253 $z->tell() 254 $z->seek($position, $whence) 255 $z->binmode() 256 $z->fileno() 257 $z->eof() 258 $z->close() 259 260 $AnyUncompressError ; 261 262 # IO::File mode 263 264 <$z> 265 read($z, $buffer); 266 read($z, $buffer, $length); 267 read($z, $buffer, $length, $offset); 268 tell($z) 269 seek($z, $position, $whence) 270 binmode($z) 271 fileno($z) 272 eof($z) 273 close($z) 274 275=head1 DESCRIPTION 276 277This module provides a Perl interface that allows the reading of 278files/buffers that have been compressed with a variety of compression 279libraries. 280 281The formats supported are: 282 283=over 5 284 285=item RFC 1950 286 287=item RFC 1951 (optionally) 288 289=item gzip (RFC 1952) 290 291=item zip 292 293=item bzip2 294 295=item lzop 296 297=item lzf 298 299=item lzma 300 301=item xz 302 303=back 304 305The module will auto-detect which, if any, of the supported 306compression formats is being used. 307 308=head1 Functional Interface 309 310A top-level function, C<anyuncompress>, is provided to carry out 311"one-shot" uncompression between buffers and/or files. For finer 312control over the uncompression process, see the L</"OO Interface"> 313section. 314 315 use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ; 316 317 anyuncompress $input => $output [,OPTS] 318 or die "anyuncompress failed: $AnyUncompressError\n"; 319 320The functional interface needs Perl5.005 or better. 321 322=head2 anyuncompress $input => $output [, OPTS] 323 324C<anyuncompress> expects at least two parameters, C<$input> and C<$output>. 325 326=head3 The C<$input> parameter 327 328The parameter, C<$input>, is used to define the source of 329the compressed data. 330 331It can take one of the following forms: 332 333=over 5 334 335=item A filename 336 337If the C<$input> parameter is a simple scalar, it is assumed to be a 338filename. This file will be opened for reading and the input data 339will be read from it. 340 341=item A filehandle 342 343If the C<$input> parameter is a filehandle, the input data will be 344read from it. 345The string '-' can be used as an alias for standard input. 346 347=item A scalar reference 348 349If C<$input> is a scalar reference, the input data will be read 350from C<$$input>. 351 352=item An array reference 353 354If C<$input> is an array reference, each element in the array must be a 355filename. 356 357The input data will be read from each file in turn. 358 359The complete array will be walked to ensure that it only 360contains valid filenames before any data is uncompressed. 361 362=item An Input FileGlob string 363 364If C<$input> is a string that is delimited by the characters "<" and ">" 365C<anyuncompress> will assume that it is an I<input fileglob string>. The 366input is the list of files that match the fileglob. 367 368See L<File::GlobMapper|File::GlobMapper> for more details. 369 370=back 371 372If the C<$input> parameter is any other type, C<undef> will be returned. 373 374=head3 The C<$output> parameter 375 376The parameter C<$output> is used to control the destination of the 377uncompressed data. This parameter can take one of these forms. 378 379=over 5 380 381=item A filename 382 383If the C<$output> parameter is a simple scalar, it is assumed to be a 384filename. This file will be opened for writing and the uncompressed 385data will be written to it. 386 387=item A filehandle 388 389If the C<$output> parameter is a filehandle, the uncompressed data 390will be written to it. 391The string '-' can be used as an alias for standard output. 392 393=item A scalar reference 394 395If C<$output> is a scalar reference, the uncompressed data will be 396stored in C<$$output>. 397 398=item An Array Reference 399 400If C<$output> is an array reference, the uncompressed data will be 401pushed onto the array. 402 403=item An Output FileGlob 404 405If C<$output> is a string that is delimited by the characters "<" and ">" 406C<anyuncompress> will assume that it is an I<output fileglob string>. The 407output is the list of files that match the fileglob. 408 409When C<$output> is an fileglob string, C<$input> must also be a fileglob 410string. Anything else is an error. 411 412See L<File::GlobMapper|File::GlobMapper> for more details. 413 414=back 415 416If the C<$output> parameter is any other type, C<undef> will be returned. 417 418=head2 Notes 419 420When C<$input> maps to multiple compressed files/buffers and C<$output> is 421a single file/buffer, after uncompression C<$output> will contain a 422concatenation of all the uncompressed data from each of the input 423files/buffers. 424 425=head2 Optional Parameters 426 427Unless specified below, the optional parameters for C<anyuncompress>, 428C<OPTS>, are the same as those used with the OO interface defined in the 429L</"Constructor Options"> section below. 430 431=over 5 432 433=item C<< AutoClose => 0|1 >> 434 435This option applies to any input or output data streams to 436C<anyuncompress> that are filehandles. 437 438If C<AutoClose> is specified, and the value is true, it will result in all 439input and/or output filehandles being closed once C<anyuncompress> has 440completed. 441 442This parameter defaults to 0. 443 444=item C<< BinModeOut => 0|1 >> 445 446When writing to a file or filehandle, set C<binmode> before writing to the 447file. 448 449Defaults to 0. 450 451=item C<< Append => 0|1 >> 452 453The behaviour of this option is dependent on the type of output data 454stream. 455 456=over 5 457 458=item * A Buffer 459 460If C<Append> is enabled, all uncompressed data will be append to the end of 461the output buffer. Otherwise the output buffer will be cleared before any 462uncompressed data is written to it. 463 464=item * A Filename 465 466If C<Append> is enabled, the file will be opened in append mode. Otherwise 467the contents of the file, if any, will be truncated before any uncompressed 468data is written to it. 469 470=item * A Filehandle 471 472If C<Append> is enabled, the filehandle will be positioned to the end of 473the file via a call to C<seek> before any uncompressed data is 474written to it. Otherwise the file pointer will not be moved. 475 476=back 477 478When C<Append> is specified, and set to true, it will I<append> all uncompressed 479data to the output data stream. 480 481So when the output is a filehandle it will carry out a seek to the eof 482before writing any uncompressed data. If the output is a filename, it will be opened for 483appending. If the output is a buffer, all uncompressed data will be 484appended to the existing buffer. 485 486Conversely when C<Append> is not specified, or it is present and is set to 487false, it will operate as follows. 488 489When the output is a filename, it will truncate the contents of the file 490before writing any uncompressed data. If the output is a filehandle 491its position will not be changed. If the output is a buffer, it will be 492wiped before any uncompressed data is output. 493 494Defaults to 0. 495 496=item C<< MultiStream => 0|1 >> 497 498If the input file/buffer contains multiple compressed data streams, this 499option will uncompress the whole lot as a single data stream. 500 501Defaults to 0. 502 503=item C<< TrailingData => $scalar >> 504 505Returns the data, if any, that is present immediately after the compressed 506data stream once uncompression is complete. 507 508This option can be used when there is useful information immediately 509following the compressed data stream, and you don't know the length of the 510compressed data stream. 511 512If the input is a buffer, C<trailingData> will return everything from the 513end of the compressed data stream to the end of the buffer. 514 515If the input is a filehandle, C<trailingData> will return the data that is 516left in the filehandle input buffer once the end of the compressed data 517stream has been reached. You can then use the filehandle to read the rest 518of the input file. 519 520Don't bother using C<trailingData> if the input is a filename. 521 522If you know the length of the compressed data stream before you start 523uncompressing, you can avoid having to use C<trailingData> by setting the 524C<InputLength> option. 525 526=back 527 528=head2 Examples 529 530To read the contents of the file C<file1.txt.Compressed> and write the 531uncompressed data to the file C<file1.txt>. 532 533 use strict ; 534 use warnings ; 535 use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ; 536 537 my $input = "file1.txt.Compressed"; 538 my $output = "file1.txt"; 539 anyuncompress $input => $output 540 or die "anyuncompress failed: $AnyUncompressError\n"; 541 542To read from an existing Perl filehandle, C<$input>, and write the 543uncompressed data to a buffer, C<$buffer>. 544 545 use strict ; 546 use warnings ; 547 use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ; 548 use IO::File ; 549 550 my $input = new IO::File "<file1.txt.Compressed" 551 or die "Cannot open 'file1.txt.Compressed': $!\n" ; 552 my $buffer ; 553 anyuncompress $input => \$buffer 554 or die "anyuncompress failed: $AnyUncompressError\n"; 555 556To uncompress all files in the directory "/my/home" that match "*.txt.Compressed" and store the compressed data in the same directory 557 558 use strict ; 559 use warnings ; 560 use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ; 561 562 anyuncompress '</my/home/*.txt.Compressed>' => '</my/home/#1.txt>' 563 or die "anyuncompress failed: $AnyUncompressError\n"; 564 565and if you want to compress each file one at a time, this will do the trick 566 567 use strict ; 568 use warnings ; 569 use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ; 570 571 for my $input ( glob "/my/home/*.txt.Compressed" ) 572 { 573 my $output = $input; 574 $output =~ s/.Compressed// ; 575 anyuncompress $input => $output 576 or die "Error compressing '$input': $AnyUncompressError\n"; 577 } 578 579=head1 OO Interface 580 581=head2 Constructor 582 583The format of the constructor for IO::Uncompress::AnyUncompress is shown below 584 585 my $z = new IO::Uncompress::AnyUncompress $input [OPTS] 586 or die "IO::Uncompress::AnyUncompress failed: $AnyUncompressError\n"; 587 588Returns an C<IO::Uncompress::AnyUncompress> object on success and undef on failure. 589The variable C<$AnyUncompressError> will contain an error message on failure. 590 591If you are running Perl 5.005 or better the object, C<$z>, returned from 592IO::Uncompress::AnyUncompress can be used exactly like an L<IO::File|IO::File> filehandle. 593This means that all normal input file operations can be carried out with 594C<$z>. For example, to read a line from a compressed file/buffer you can 595use either of these forms 596 597 $line = $z->getline(); 598 $line = <$z>; 599 600The mandatory parameter C<$input> is used to determine the source of the 601compressed data. This parameter can take one of three forms. 602 603=over 5 604 605=item A filename 606 607If the C<$input> parameter is a scalar, it is assumed to be a filename. This 608file will be opened for reading and the compressed data will be read from it. 609 610=item A filehandle 611 612If the C<$input> parameter is a filehandle, the compressed data will be 613read from it. 614The string '-' can be used as an alias for standard input. 615 616=item A scalar reference 617 618If C<$input> is a scalar reference, the compressed data will be read from 619C<$$output>. 620 621=back 622 623=head2 Constructor Options 624 625The option names defined below are case insensitive and can be optionally 626prefixed by a '-'. So all of the following are valid 627 628 -AutoClose 629 -autoclose 630 AUTOCLOSE 631 autoclose 632 633OPTS is a combination of the following options: 634 635=over 5 636 637=item C<< AutoClose => 0|1 >> 638 639This option is only valid when the C<$input> parameter is a filehandle. If 640specified, and the value is true, it will result in the file being closed once 641either the C<close> method is called or the IO::Uncompress::AnyUncompress object is 642destroyed. 643 644This parameter defaults to 0. 645 646=item C<< MultiStream => 0|1 >> 647 648Allows multiple concatenated compressed streams to be treated as a single 649compressed stream. Decompression will stop once either the end of the 650file/buffer is reached, an error is encountered (premature eof, corrupt 651compressed data) or the end of a stream is not immediately followed by the 652start of another stream. 653 654This parameter defaults to 0. 655 656=item C<< Prime => $string >> 657 658This option will uncompress the contents of C<$string> before processing the 659input file/buffer. 660 661This option can be useful when the compressed data is embedded in another 662file/data structure and it is not possible to work out where the compressed 663data begins without having to read the first few bytes. If this is the 664case, the uncompression can be I<primed> with these bytes using this 665option. 666 667=item C<< Transparent => 0|1 >> 668 669If this option is set and the input file/buffer is not compressed data, 670the module will allow reading of it anyway. 671 672In addition, if the input file/buffer does contain compressed data and 673there is non-compressed data immediately following it, setting this option 674will make this module treat the whole file/buffer as a single data stream. 675 676This option defaults to 1. 677 678=item C<< BlockSize => $num >> 679 680When reading the compressed input data, IO::Uncompress::AnyUncompress will read it in 681blocks of C<$num> bytes. 682 683This option defaults to 4096. 684 685=item C<< InputLength => $size >> 686 687When present this option will limit the number of compressed bytes read 688from the input file/buffer to C<$size>. This option can be used in the 689situation where there is useful data directly after the compressed data 690stream and you know beforehand the exact length of the compressed data 691stream. 692 693This option is mostly used when reading from a filehandle, in which case 694the file pointer will be left pointing to the first byte directly after the 695compressed data stream. 696 697This option defaults to off. 698 699=item C<< Append => 0|1 >> 700 701This option controls what the C<read> method does with uncompressed data. 702 703If set to 1, all uncompressed data will be appended to the output parameter 704of the C<read> method. 705 706If set to 0, the contents of the output parameter of the C<read> method 707will be overwritten by the uncompressed data. 708 709Defaults to 0. 710 711=item C<< Strict => 0|1 >> 712 713This option controls whether the extra checks defined below are used when 714carrying out the decompression. When Strict is on, the extra tests are 715carried out, when Strict is off they are not. 716 717The default for this option is off. 718 719=item C<< RawInflate => 0|1 >> 720 721When auto-detecting the compressed format, try to test for raw-deflate (RFC 7221951) content using the C<IO::Uncompress::RawInflate> module. 723 724The reason this is not default behaviour is because RFC 1951 content can 725only be detected by attempting to uncompress it. This process is error 726prone and can result is false positives. 727 728Defaults to 0. 729 730=item C<< UnLzma => 0|1 >> 731 732When auto-detecting the compressed format, try to test for lzma_alone 733content using the C<IO::Uncompress::UnLzma> module. 734 735The reason this is not default behaviour is because lzma_alone content can 736only be detected by attempting to uncompress it. This process is error 737prone and can result is false positives. 738 739Defaults to 0. 740 741=back 742 743=head2 Examples 744 745TODO 746 747=head1 Methods 748 749=head2 read 750 751Usage is 752 753 $status = $z->read($buffer) 754 755Reads a block of compressed data (the size the the compressed block is 756determined by the C<Buffer> option in the constructor), uncompresses it and 757writes any uncompressed data into C<$buffer>. If the C<Append> parameter is 758set in the constructor, the uncompressed data will be appended to the 759C<$buffer> parameter. Otherwise C<$buffer> will be overwritten. 760 761Returns the number of uncompressed bytes written to C<$buffer>, zero if eof 762or a negative number on error. 763 764=head2 read 765 766Usage is 767 768 $status = $z->read($buffer, $length) 769 $status = $z->read($buffer, $length, $offset) 770 771 $status = read($z, $buffer, $length) 772 $status = read($z, $buffer, $length, $offset) 773 774Attempt to read C<$length> bytes of uncompressed data into C<$buffer>. 775 776The main difference between this form of the C<read> method and the 777previous one, is that this one will attempt to return I<exactly> C<$length> 778bytes. The only circumstances that this function will not is if end-of-file 779or an IO error is encountered. 780 781Returns the number of uncompressed bytes written to C<$buffer>, zero if eof 782or a negative number on error. 783 784=head2 getline 785 786Usage is 787 788 $line = $z->getline() 789 $line = <$z> 790 791Reads a single line. 792 793This method fully supports the use of of the variable C<$/> (or 794C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to 795determine what constitutes an end of line. Paragraph mode, record mode and 796file slurp mode are all supported. 797 798=head2 getc 799 800Usage is 801 802 $char = $z->getc() 803 804Read a single character. 805 806=head2 ungetc 807 808Usage is 809 810 $char = $z->ungetc($string) 811 812=head2 getHeaderInfo 813 814Usage is 815 816 $hdr = $z->getHeaderInfo(); 817 @hdrs = $z->getHeaderInfo(); 818 819This method returns either a hash reference (in scalar context) or a list 820or hash references (in array context) that contains information about each 821of the header fields in the compressed data stream(s). 822 823=head2 tell 824 825Usage is 826 827 $z->tell() 828 tell $z 829 830Returns the uncompressed file offset. 831 832=head2 eof 833 834Usage is 835 836 $z->eof(); 837 eof($z); 838 839Returns true if the end of the compressed input stream has been reached. 840 841=head2 seek 842 843 $z->seek($position, $whence); 844 seek($z, $position, $whence); 845 846Provides a sub-set of the C<seek> functionality, with the restriction 847that it is only legal to seek forward in the input file/buffer. 848It is a fatal error to attempt to seek backward. 849 850The C<$whence> parameter takes one the usual values, namely SEEK_SET, 851SEEK_CUR or SEEK_END. 852 853Returns 1 on success, 0 on failure. 854 855=head2 binmode 856 857Usage is 858 859 $z->binmode 860 binmode $z ; 861 862This is a noop provided for completeness. 863 864=head2 opened 865 866 $z->opened() 867 868Returns true if the object currently refers to a opened file/buffer. 869 870=head2 autoflush 871 872 my $prev = $z->autoflush() 873 my $prev = $z->autoflush(EXPR) 874 875If the C<$z> object is associated with a file or a filehandle, this method 876returns the current autoflush setting for the underlying filehandle. If 877C<EXPR> is present, and is non-zero, it will enable flushing after every 878write/print operation. 879 880If C<$z> is associated with a buffer, this method has no effect and always 881returns C<undef>. 882 883B<Note> that the special variable C<$|> B<cannot> be used to set or 884retrieve the autoflush setting. 885 886=head2 input_line_number 887 888 $z->input_line_number() 889 $z->input_line_number(EXPR) 890 891Returns the current uncompressed line number. If C<EXPR> is present it has 892the effect of setting the line number. Note that setting the line number 893does not change the current position within the file/buffer being read. 894 895The contents of C<$/> are used to to determine what constitutes a line 896terminator. 897 898=head2 fileno 899 900 $z->fileno() 901 fileno($z) 902 903If the C<$z> object is associated with a file or a filehandle, C<fileno> 904will return the underlying file descriptor. Once the C<close> method is 905called C<fileno> will return C<undef>. 906 907If the C<$z> object is associated with a buffer, this method will return 908C<undef>. 909 910=head2 close 911 912 $z->close() ; 913 close $z ; 914 915Closes the output file/buffer. 916 917For most versions of Perl this method will be automatically invoked if 918the IO::Uncompress::AnyUncompress object is destroyed (either explicitly or by the 919variable with the reference to the object going out of scope). The 920exceptions are Perl versions 5.005 through 5.00504 and 5.8.0. In 921these cases, the C<close> method will be called automatically, but 922not until global destruction of all live objects when the program is 923terminating. 924 925Therefore, if you want your scripts to be able to run on all versions 926of Perl, you should call C<close> explicitly and not rely on automatic 927closing. 928 929Returns true on success, otherwise 0. 930 931If the C<AutoClose> option has been enabled when the IO::Uncompress::AnyUncompress 932object was created, and the object is associated with a file, the 933underlying file will also be closed. 934 935=head2 nextStream 936 937Usage is 938 939 my $status = $z->nextStream(); 940 941Skips to the next compressed data stream in the input file/buffer. If a new 942compressed data stream is found, the eof marker will be cleared and C<$.> 943will be reset to 0. 944 945Returns 1 if a new stream was found, 0 if none was found, and -1 if an 946error was encountered. 947 948=head2 trailingData 949 950Usage is 951 952 my $data = $z->trailingData(); 953 954Returns the data, if any, that is present immediately after the compressed 955data stream once uncompression is complete. It only makes sense to call 956this method once the end of the compressed data stream has been 957encountered. 958 959This option can be used when there is useful information immediately 960following the compressed data stream, and you don't know the length of the 961compressed data stream. 962 963If the input is a buffer, C<trailingData> will return everything from the 964end of the compressed data stream to the end of the buffer. 965 966If the input is a filehandle, C<trailingData> will return the data that is 967left in the filehandle input buffer once the end of the compressed data 968stream has been reached. You can then use the filehandle to read the rest 969of the input file. 970 971Don't bother using C<trailingData> if the input is a filename. 972 973If you know the length of the compressed data stream before you start 974uncompressing, you can avoid having to use C<trailingData> by setting the 975C<InputLength> option in the constructor. 976 977=head1 Importing 978 979No symbolic constants are required by this IO::Uncompress::AnyUncompress at present. 980 981=over 5 982 983=item :all 984 985Imports C<anyuncompress> and C<$AnyUncompressError>. 986Same as doing this 987 988 use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ; 989 990=back 991 992=head1 EXAMPLES 993 994=head1 SEE ALSO 995 996L<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::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate> 997 998L<IO::Compress::FAQ|IO::Compress::FAQ> 999 1000L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>, 1001L<Archive::Tar|Archive::Tar>, 1002L<IO::Zlib|IO::Zlib> 1003 1004=head1 AUTHOR 1005 1006This module was written by Paul Marquess, F<pmqs@cpan.org>. 1007 1008=head1 MODIFICATION HISTORY 1009 1010See the Changes file. 1011 1012=head1 COPYRIGHT AND LICENSE 1013 1014Copyright (c) 2005-2012 Paul Marquess. All rights reserved. 1015 1016This program is free software; you can redistribute it and/or 1017modify it under the same terms as Perl itself. 1018 1019