Почему оператор "?:" Не может вернуть список?

Зачем ?: оператор не может вернуть список?

my $hash =  {
    ...
    ($row->active?checked=>1:()),
};

DOC ничего не говорит о скалярном или списочном контексте

UPD
Другой пример:

@list =  2,3;         # CORRECT
@list =  1? 2,3 : (); # Syntax error

Почему первый в порядке, а второй нет? Кажется, не должно быть проблемы для Perl просто распространять 2,3 во внешний контекст;

2 ответа

Решение

Проблема в том, что , а также => (разделители списка) имеют более низкий приоритет, чем ?: а также =,

Так что вопрос не в том, проходит ли perl правую часть = как список или скаляр. Это синтаксическая ошибка, потому что @list=1?2 а также 3:() обрабатываются как отдельные элементы списка, каждый из которых содержит половину ?: заявление, которое не допускается.

Это не имеет ничего общего с контекстом. Вам нужно поставить круглые скобки вокруг средней части, чтобы Perl правильно проанализировал ваш синтаксис.

my $hash = { ( 1 ? ( checked => 1 ) : () ), };

Без них есть синтаксическая ошибка.

синтаксическая ошибка в /home/simbabque/code/scratch/scratch.pl строке 109, рядом с "флажком =>"

Другие вопросы по тегам