use strict; use warnings; my $str = 'abcdefghijklmnop'; sub shrink { my $bitstr = unpack('B*', $_[0]); $bitstr =~ s/.(.{7})/$1/g; pack('B*', $bitstr); } sub grow { my $bitstr = unpack('B*', $_[0]); $bitstr =~ s/(.{7})/0$1/g; pack('B*', $bitstr); } my $shrunk = shrink($str); printf "Was: %s, Is: %s\n", length($str), length($shrunk); printf "Restored: <%s>\n", grow $shrunk;