Значение ускоренного логического оператора

В отличие от C (и других похожих языков), значением ускоренного логического оператора является значение, полученное при обработке последней части, а не логическая величина. Формально результат получается эквивалентным: последняя вычисленная часть всегда истинна, если истинно все выражение, и всегда ложна, если ложно все выражение. Однако такое возвращаемое значение намного полезнее. В частности, логический оператор OR весьма удобен для выбора значения по умолчанию:

my $last_name = $last_name{$someone} || '(No last name)';

Если значение $someone отсутствует в хеше, левая сторона равна undef, что интерпретируется как false. Значит, логическому оператору OR придется вычислять правую сторону, а полученный результат будет использоваться как значение по умолчанию. Однако в этой идиоме значение по умолчанию не просто заменяет undef; оно с таким же успехом заменит любое ложное значение. Проблема решается при помощи тернарного оператора:

my $last_name = defined $last_name{$someone} ?
$last_name{$someone} : '(No last name)';

Однако запись получается слишком громоздкой, а $last_name{$someone} в нее включается дважды. В Perl 5.10 появился более удобный синтаксис для выполнения подобных операций; он описан в следующем разделе.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Автоинкремент и автодекремент
Значение автоинкремента
Логические операторы
Метки блоков
Модификаторы выражений