Почему оператор "?:" Не может вернуть список?
Зачем ?:
оператор не может вернуть список?
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, рядом с "флажком =>"