my $EXPLICIT_YEAR = $ALL_PAGES ? 0 : ($store{year} || $current_year);
В этом выражении используется оператор Ternary "?:" в сочетании с подвыражением с использованием логического ИЛИ в стиле ||
C * . Смотрите perldoc perlop .
$ALL_PAGES ?
Выражение перед ?
- условием - оценивается как логическое выражение. Истинное значение, означающее любое значение, которое не является нулем, пустой строкой или неопределенным (не объявлено).
0 : ( $store{year} || $current_year )
Значения по обе стороны от :
являются значениями, которые должны быть возвращены, в зависимости от возвращаемого значения условия. Если условие оценивается как true, вернуть крайнее левое значение, в противном случае крайнее правое. Крайнее левое значение - просто ноль 0
.
$store{year} || $current_year
Самым правым значением является само выражение, использующее логический оператор ИЛИ в стиле C. Он вернет крайнее левое значение, если оценивает значение true (и игнорирует крайнее правое значение). В противном случае он вернет самое правильное значение. Итак:
- если $ ALL_PAGES имеет значение true, тогда установить $ EXPLICIT_YEAR на ноль
- иначе, если $ ALL_PAGES равно false, тогда:
- если $ store {year} равен true, тогда установить $ EXPLICIT_YEAR в $ store {year}
- иначе установите $ EXPLICIT_YEAR на $ current_year