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