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