Когда Ларри выбирал, какие операторы должны быть доступны в Perl, он не захотел обижать бывших программистов C. А это значит, что в Perl переносится и самый запутанный оператор C – тернарный оператор ?:. Впрочем при всей запутанности он может быть весьма полезен. Тернарный оператор напоминает проверку ifQthenQelse, упакованную в одно выражение. Оператор называется «тернарным», потому что он получает три операнда. Оператор выглядит примерно так: 

выражение ? выражение_для_true : выражение_для_false

Сначала Perl вычисляет первое выражение и определяет, истинно оно или ложно. При истинном результате используется второе подвыражение, а при ложном – третье. Каждый раз вычисляется только одно из двух «правых» выражений, а другое игнорируется. Иначе говоря, если первое выражение истинно, то вычисляется второе подвыражение, а третье игнорируется. Если первое выражение ложно, то второе выражение игнорируется, а третье вычисляется как общий результат. В этом примере результат вызова функции is_weekend определяет, какое выражение будет присвоено переменной:

my $location = is_weekend($day) ? "home" : "work";

Любое использование оператора ?: можно переписать в виде структуры if, но часто с потерей удобства и компактности.

А вот полезный прием, который может использоваться для кодирования удобного разветвленного выбора:

my $size =
($width < 10) ? "small" :
($width < 20) ? "medium" :
($width < 50) ? "large" :
"extra-large"; # По умолчанию