&
- побитовое И.См. Битовые операторы .
Итак, flags
обрабатывается как последовательность битов, а затем вы И это с чем-то, что имеет именно тот бит, который вы хотите проверить.Если результат не равен нулю, то бит установлен, иначе бит, на который вы смотрели, не установлен.В частности, в вашем примере 0x400 = 0100 0000 0000
используется для проверки, установлен ли 11-й бит (1) в flags
.
Как правило, вы бы не использовали 0x400
, но именованную константу,поэтому ясно, что представляет этот бит.
Так что if ($flags == "\x400")
не правильно.См. Работа с битами в Perl .
Типичный пример маскирования битов можно увидеть в Разрешения файла Linux .