$x = "\x55\xAA\x55\xAA";; substr( $x, $_, 1 ) = chr( ord( substr( $x, $_, 1 )) << 1 ) for 0 .. 3; print unpack 'b*', $x;; Character in 'b' format wrapped in unpack at (eval 34) line 1, line 26. Character in 'b' format wrapped in unpack at (eval 34) line 1, line 26. 01010101001010100101010100101010