Perl предоставляет несколько способов работы с двоичными данными:
- Битовые операторы
&
, |
и ~
. pack
и *Функции 1010 *. - Функция
vec
.
Ваш сценарий звучит как набор упакованных флагов.Для этого хорошо подходят побитовые операторы:
my $mask = 1 << 3; # 0x0008
$value |= $mask; # set bit
$value &= ~$mask; # clear bit
if ($value & $mask) # check bit
vec
предназначен для использования с битовыми векторами.(Каждый элемент имеет одинаковый размер, который должен быть степенью двойки.) Он также может работать здесь:
vec($value, 3, 1) = 1; # set bit
vec($value, 3, 1) = 0; # clear bit
if (vec($value, 3, 1)) # check bit
pack
и unpack
лучше подходят для работы с такими вещами, как структуры Cили порядковый номер.