Если вы посмотрите на perldoc perlop
, то есть следующая диаграмма приоритетов :
left terms and list operators (leftward)
left ->
nonassoc ++ --
right **
right ! ~ \ and unary + and -
left =~ !~
left * / % x
left + - .
left << >>
nonassoc named unary operators
nonassoc < > <= >= lt gt le ge
nonassoc == != <=> eq ne cmp ~~
left &
left | ^
left &&
left || //
nonassoc .. ...
right ?:
right = += -= *= etc. goto last next redo dump
left , =>
nonassoc list operators (rightward)
right not
left and
left or xor
Из этой диаграммы мы ищем =~
и =
, потому что они единственные операторы, которые у вас есть здесь.
=~
- это более жесткая привязка, поэтому сначала выполняется оценка $OK = () = ($codelist =~ /$OK/g);
Затем =
в left
порядке ...
($OK = () = ($codelist =~ /$OK/g));
($OK = (() = ($codelist =~ /$OK/g)));
Другим полезным инструментом, упомянутым в других ответах, является B::Deparse
с опцией -p
. Тем не менее, это хорошая идея, чтобы ознакомиться с приведенной выше таблицей или хотя бы знать, где на нее ссылаться.
В качестве примечания: =()=
- довольно распространенная идиома, настолько, что она имеет запись в дистрибутиве perlsecret в качестве секретного оператора "Goatse" (не Google это) или "Saturn"; он по существу используется для принудительного отображения контекста списка с правой стороны, обычно для возврата счетчика (поскольку левая сторона является скаляром).