# variant a) using floor() use POSIX; $data = pack 'b*', join q{}, splice @bits, 0, POSIX::floor(@bits / 8) * 8; # variant b) using int $data = pack 'b*', join q{}, splice @bits, 0, int(@bits / 8) * 8;