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 (){ $gz->gzwrite($_) or die "$f.gz,$gzerrno:$!"; } $gz->gzclose; } }