Проблема в том, что Perl не смотрит вперед достаточно далеко, чтобы выяснить, означает ли {
«начать анонимную ссылку на хэш» или «запустить блок кода». Он должен (в идеале) посмотреть соответствующий }
и посмотреть, есть ли запятая или нет, и действовать соответственно, но это не так. Это только смотрит немного вперед и пытается угадать. И на этот раз это неправильно, и вы получите синтаксическую ошибку о запятой, которой не должно быть, за исключением того, что она не должна перемещаться.
perldoc -f map
расскажет вам все об этом. По сути, это говорит о том, что если вы установите +{
, Perl поймет, что это означает «не блок кода», и предположит, что это ссылка на хеш. Это, вероятно, причина вашей синтаксической ошибки. В качестве другого предложения можно сказать, что map({ HASH STUFF }, $rs->all)
- держу пари, что Perl не догадывается, что здесь указана ссылка на код.
Я не мог заставить его работать, но не имел $rs
или ->TO_JSON
, или переменную с именем $q
Я все равно не мог заставить это работать. Надеюсь, это поможет. Если нет, отправьте немного больше кода. Не волнуйтесь, мы не кусаемся.
Кроме того, пока мы занимаемся этим, почему бы не написать это так:
my $results;
$results->{data} = [ map MAGIC MAP STUFF, $rs->all ];
Возможно, возможно, будет более читабельным, особенно если вы добавляете много вещей к $results
одновременно.