Каждый оператор perl имеет определенное поведение c в списке и скалярном контексте. Операторы задают контекст для своих операндов, но получают контекст из того, для чего они являются операндами. Когда список назначается в скалярном контексте, он возвращает количество элементов в правой части назначения. Это включает код вроде:
while (my @pair = splice(@array, 0, 1)) {
Нет ничего особенного в том, как обрабатывается = () =
; с таким же успехом вы могли бы сделать = ($dummy) =
или = (@dummy) =
; ключевая часть в том, что вы хотите, чтобы совпадение было контекстом списка (производя все возможные совпадения), а затем просто получало их количество.
Итак, вы делаете присвоение списка (что и делает =
). всякий раз, когда в качестве левого операнда есть выражение в скобках или массив или фрагмент), но так как вы на самом деле не хотите значений, вы можете использовать пустой список. И затем поместите это в скалярный контекст; в этом случае использование назначения списка в качестве правого операнда скалярного назначения.