Я работаю над Perl, и я столкнулся с нечетным результатом с помощью условного оператора.Операция условного оператора Odd Perl
Код в вопросе:
($foo eq "blah") ? @x = @somearray : @y = ("another","array");
Попытка скомпилировать этот код приводит к ошибке "Assignment to both a list and a scalar at XXX line YY, near ');'
". Пытаясь определить источник ошибки, я написал это, используя пару различных способов представления массива в Perl, и все они возвращаются с той же ошибкой. Теперь я сначала подумал, что это какая-то немая очевидная ошибка с операторами присваивания, но только, чтобы удовлетворить мое любопытство, я переписал заявление в более подробном виде:
if($foo eq "blah") {
@x = @somearray;
} else {
@y = ("another","array");
}
Этой версия коды компилируется прекрасно.
Есть ли какое-то тонкое различие между тем, как работает условный оператор и выполняется базовое оператор if-else, которое я здесь отсутствует? Я всегда понимал условный оператор как краткую версию второго оператора. Если между ними нет функциональной разницы, почему объект Perl должен быть первым, но не вторым?
Лично я бы описал второй код образец как «более четкий» и «более простой», а не «подробный». – qid
s/тройной/условный/!!! Могло быть более одного троичного оператора. – Ether
Извинения, я, конечно, не имею проблемы со второй версией, и я бы не судил человека за его использование! Возможно, «более явный» был бы лучшим способом выразить это, хотя я не имел в виду многословный, чтобы оторваться от негативной коннотации. – warhorus