simple gzip & gunzip functionality without nasty "system's" calls.
deals with extensions relatively intelligently.
illustrates & requires use of Compress::Zlib.
use Compress::Zlib;
use strict;
foreach my $f ( grep { -f } @ARGV ){
my ($buffer,$gz);
if ($f=~/gz$/){
(my $rtf = $f) =~ s/(.)gz$//;
open OOT, ">$rtf" or die "$0:$rtf:$!";
binmode OOT;
$gz = gzopen($f, "rb") or die "$0:$gzerrno:$!";
print OOT $buffer while $gz->gzread($buffer) > 0;
die "$f: $gzerrno:$!" if $gzerrno != Z_STREAM_END;
$gz->gzclose();
close(OOT);
} else { # gzip our file
open COOT, "$f" or die "$0:$f:$!";
binmode COOT;
$gz = gzopen("$f.gz", "wb")
or die "$0:$gzerrno:$!";
while (<COOT>){
$gz->gzwrite($_) or die "$f.gz,$gzerrno:$!";
}
$gz->gzclose;
}
}