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