Значение ускоренного логического оператора
В отличие от 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 появился более удобный синтаксис для выполнения подобных операций; он описан в следующем разделе.
Комментарии:
Нету комментариев для вывода...