There are streaming modules on CPAN that support gzip and Bzip2 and many more based on PerlIO::via, all using syntax like:
# compress open my $fh, ">:via(XXZ)", "test.xxz"; print $fh $text; # decompress open my $fh, "<:via(XXZ)", "test.xxz"; while (<$fh>) { ... }
where XXZ is the required PerlIO::via::XXZ (gzip, Bzip2, ...) and .xxz is the extension that goes with it (.gz, .bz2, ...).
I needed this for xz-(de)compression, but it wasn't there (yet), so I stole from existing modules and whipped up PerlIO::via::xz, which works for what I want.
BUT, it fails in a scope where $/ = undef;, and I have no tuits to investigate.
This has not (yet) been put to CPAN, and to be honest, I don't feel like it (yet).
If anyone thinks this is a good thing to have and wants a kickstart in getting something ready to distribute, please contact me: you're welcome to grab it a use it to make it *your* (first) distribution.
Enjoy, Have FUN! H.Merijn