Операция выбора

Единственная тернарная операция выбора
Операнд1 ? операнд2 : операнд3
полностью заимствована из языка С и работает точно так же, как и ее двойник: если операнд1 истинен, то возвращается значение операнд2, в противном случае операнд3:
($n == 1) ? "male" : "female";
Контекст, в котором вычисляется эта операция, распространяется и на возвращаемое значение этой операции, то есть операнд2 и операнд3 вычисляются в том же самом контексте:
$а = $yes ? $b : @b; # Скалярный контекст. Если
                     # возвращается массив @b, то 
                     # переменной $а присваивается
                     # количество его элементов
Операцию выбора можно использовать в качестве левого операнда операции присваивания, если и второй, и третий ее операнды являются правильными l-значениями:
($а = $yes ? $b : @b) = @с;
В связи с тем, что результатом операции выбора может оказаться правильное l-значение, рекомендуется использовать скобки для уточнения ее операндов, особенно если они представлены выражениями. Например, если в следующем выражении:
($a % 3) ? ($a += 2) : ($a -= 2);
опустить скобки вокруг операндов
$а % 3 ? $a += 2 : $a -= 2;
то оно будет интерпретировано следующим образом:
(($а % 3) ? ($a += 2) : $a) -= 2;
так как операция выбора имеет более высокий приоритет (то есть выполняется при вычислении выражения раньше), чем любая операция сложного присваивания.

Следующая страница Содержание главы


Реклама