$ echo "ABBCBCAAAAABBCBCACCCAAAAACAAAAABBBBBAAAAABBAAAAAAAABBCCCACCAABC BCCCBCAACAABBBCAAACCAAAAACAAAAABBBBBAAAAABBAAAAAAAABBCCCACCABBC ABCCBBBAAAABBABCACABCCCCCCAAAAABBCBBCCCCAAAAAAAAAAAAACCCACCACCC" | perl -le' use Data::Dumper; $Data::Dumper::Useqq = 1; my %alphabet = qw/ A 00 B 01 C 11 /; my %rev_alpha = reverse %alphabet; while ( <> ) { chomp; print length(), " ", $_; # compress my $data = pack "B*", join "", map $alphabet{ $_ }, split //; print length $data, " ", Dumper $data; # decompress my $uncp = join "", map $rev_alpha{ $_ }, map /../g, unpack "B*", $data; print length $uncp, " ", $uncp, "\n"; } ' 63 ABBCBCAAAAABBCBCACCCAAAAACAAAAABBBBBAAAAABBAAAAAAAABBCCCACCAABC 16 $VAR1 = "\27p\1w?\0000\1U\0\24\0\1\177<\34"; 64 ABBCBCAAAAABBCBCACCCAAAAACAAAAABBBBBAAAAABBAAAAAAAABBCCCACCAABCA 63 BCCCBCAACAABBBCAAACCAAAAACAAAAABBBBBAAAAABBAAAAAAAABBCCCACCABBC 16 $VAR1 = "\177p\301\\\17\0000\1U\0\24\0\1\177<\\"; 64 BCCCBCAACAABBBCAAACCAAAAACAAAAABBBBBAAAAABBAAAAAAAABBCCCACCABBCA 63 ABCCBBBAAAABBABCACABCCCCCCAAAAABBCBBCCCCAAAAAAAAAAAAACCCACCACCC 16 $VAR1 = "\37T\1G1\377\360\1u\377\0\0\0?<\374"; 64 ABCCBBBAAAABBABCACABCCCCCCAAAAABBCBBCCCCAAAAAAAAAAAAACCCACCACCCA