in reply to How to Unzip *.gz files

The code I use and so have just lying about is:

use strict; BEGIN { @ARGV= map { glob($_) } @ARGV } use Compress::Zlib; die "Usage: $0 {file.gz|outfile=infile} ...\n" unless @ARGV ; foreach my $infile (@ARGV) { my $outfile= $infile; if( $infile =~ /=/ ) { ( $outfile, $infile )= split /=/, $infile; } elsif( $outfile !~ s/[._]gz$//i ) { $infile .= ".gz"; } my $gz= gzopen( $infile, "rb" ) or die "Cannot open $infile: $gzerrno\n"; open( OUT, "> $outfile\0" ) or die "Can't write $outfile: $!\n"; binmode(OUT); my $buffer; print OUT $buffer while $gz->gzread($buffer) > 0; die "Error reading from $infile: $gzerrno\n" if $gzerrno != Z_STREAM_END; $gz->gzclose(); close(OUT) or warn "Error closing $outfile: $!\n"; }

where the BEGIN line is there to compensate for stupid mistakes in the construction of Win32 back a decade or so that we are still paying for and the unusual usage is to allow me to unzip several files to non-default locations with a single command. Note that it doesn't delete the *.gz file after unzipping, since I usually find that I instead want to delete the uncompressed file after I've extracted what I needed from it (and I want to keep the compressed file around in case I need to extract more stuff later).

- tye