bwt.pl 702 B

123456789101112131415161718192021222324252627282930313233
  1. #!/usr/bin/perl
  2. # Bzip2-like compressor/decompressor.
  3. # usage:
  4. # perl script.pl < input.txt > compressed.enc
  5. # perl script.pl -d < compressed.enc > decompressed.txt
  6. use 5.036;
  7. use lib qw(../lib);
  8. use Getopt::Std qw(getopts);
  9. use Compression::Util qw(:all);
  10. use constant {CHUNK_SIZE => 1 << 17};
  11. local $Compression::Util::VERBOSE = 0;
  12. getopts('d', \my %opts);
  13. sub compress ($fh, $out_fh) {
  14. while (read($fh, (my $chunk), CHUNK_SIZE)) {
  15. print $out_fh bwt_compress($chunk);
  16. }
  17. }
  18. sub decompress ($fh, $out_fh) {
  19. while (!eof($fh)) {
  20. print $out_fh bwt_decompress($fh);
  21. }
  22. }
  23. $opts{d} ? decompress(\*STDIN, \*STDOUT) : compress(\*STDIN, \*STDOUT);