my %charmap = ( A => '00', C => '01', G => '10', T => '11', ); my %digmap = ( '00' => "A", '01' => "C", '10' => "G", '11' => "T", ); my $string = $ARGV[0] || 'GATTACCCC'; $string =~ s/(.)/$charmap{$1}/ge; my $compressed = pack 'b*', $string; print "COMP: $compressed\n"; printf "%d bytes\n", length $compressed; my @data; push @data, $compressed; # now use vec() to get at the single # parts of $compressed my $decompressed = unpack 'b*', $compressed; $decompressed =~ s/(..)/$digmap{$1}/ge; print "$decompressed\n";