sub packwitharray { my $string = shift; return pack 'Cb*', length($string), join('', unpack '(b7)*', $string); } sub unpackwitharray { my ($length, $bits) = unpack 'Cb*', shift; my @chars = $bits =~ /.{7}/g; $#chars = $length - 1; return pack '(b7)*', @chars; }