Как я могу вернуть список хэш-ссылок с карты в Perl?

StackOverflow https://stackoverflow.com/questions/1403607

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть следующий в основном нормальный код:

my $results = { data => [
   map {
      my $f = 

У меня есть следующий в основном нормальный код:

my $results = { data => [
   map {
      %{

У меня есть следующий в основном нормальный код:

my $results = { data => [
   map {
      my $f = 

У меня есть следующий в основном нормальный код:

<*>

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

->TO_JSON; $f->{display_field} =

У меня есть следующий в основном нормальный код:

<*>

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

->display_field($q); $f; } $rs->all ]};

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

->TO_JSON}, display_field =>

У меня есть следующий в основном нормальный код:

my $results = { data => [
   map {
      my $f = 

У меня есть следующий в основном нормальный код:

<*>

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

->TO_JSON; $f->{display_field} =

У меня есть следующий в основном нормальный код:

<*>

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

->display_field($q); $f; } $rs->all ]};

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

->display_field($q), }, $rs->all ]};

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

->TO_JSON; $f->{display_field} =

У меня есть следующий в основном нормальный код:

<*>

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

->display_field($q); $f; } $rs->all ]};

Только я бы предпочел, чтобы это было больше похоже на следующее:

<*>

Но это дает синтаксическую ошибку. Как я могу делать то, что хочу, или моя текущая версия - лучшая?

update : извините за лишнюю точку с запятой. Уже поздно здесь. Не уверен, как я это пропустил. Спасибо, ребята!

Это было полезно?

Решение

Это дает только синтаксическую ошибку, потому что ваш Perl считает, что вам нужно пропустить запятую после map {...} , потому что он анализирует эту карту как блок, а не как выражение. Помещение + впереди исправит это. Кроме того, вы не можете использовать точку с запятой в анонимном хеше:

my $results = { data => [
   map +{
#      ^----------------- plus sign added
      %{

Это дает только синтаксическую ошибку, потому что ваш Perl считает, что вам нужно пропустить запятую после map {...} , потому что он анализирует эту карту как блок, а не как выражение. Помещение + впереди исправит это. Кроме того, вы не можете использовать точку с запятой в анонимном хеше:

<*>->TO_JSON}, display_field =>

Это дает только синтаксическую ошибку, потому что ваш Perl считает, что вам нужно пропустить запятую после map {...} , потому что он анализирует эту карту как блок, а не как выражение. Помещение + впереди исправит это. Кроме того, вы не можете использовать точку с запятой в анонимном хеше:

<*>->display_field($q); # ^---- should be comma or nothing }, $rs->all ]};

Другие советы

Проблема в том, что Perl не заглядывает достаточно далеко вперед, чтобы выяснить, означает ли { «запуск анонимной ссылки на хеш» " или "начать блок кода". Он должен (в идеале) посмотреть соответствующий } и посмотреть, есть ли запятая или нет, и действовать соответственно, но это не так. Это только смотрит немного вперед и пытается угадать. И на этот раз это неправильно, и вы получите синтаксическую ошибку о запятой, которой не должно быть, за исключением того, что она не должна перемещаться.

perldoc -f map расскажет вам все об этом. По сути, это говорит о том, что если вы введете + {, Perl поймет, что это означает «не блок кода». и думаю, что это ссылка на хеш. Это, вероятно, причина вашей синтаксической ошибки. В качестве другого предложения, можно сказать, что map ({HASH STUFF}, $ rs-> gt; all) - держу пари, что Perl не будет догадываться, что это ссылка на код здесь.

Я не смог заставить его работать, но у меня не было $ rs или -> g_To_JSON , или переменной с именем $ q Я все равно не мог заставить это работать. Надеюсь, это поможет. Если нет, отправьте немного больше кода. Не волнуйтесь, мы не кусаемся.

Кроме того, пока мы занимаемся этим, почему бы не написать это так:

my $results;
$results->{data} = [ map MAGIC MAP STUFF, $rs->all ];

Возможно, будет более читабельным, особенно если вы добавляете много материала в $ results сразу.

Я не совсем уверен, какую структуру вы ищете. map в вашем первом примере уже возвращает список хэш-ссылок (каждая версия $ f ).

Если вы просто хотите, чтобы синтаксис был похож на ваш второй пример, то вы были почти правы; вам нужно избавиться от лишней точки с запятой в блоке карты и использовать пару фигурных скобок, чтобы создать анонимную ссылку на хеш.

Что-то вроде:

my $results = { data => [
    map { { %{

Я не совсем уверен, какую структуру вы ищете. map в вашем первом примере уже возвращает список хэш-ссылок (каждая версия $ f ).

Если вы просто хотите, чтобы синтаксис был похож на ваш второй пример, то вы были почти правы; вам нужно избавиться от лишней точки с запятой в блоке карты и использовать пару фигурных скобок, чтобы создать анонимную ссылку на хеш.

Что-то вроде:

<*>->TO_JSON}, display_field =>

Я не совсем уверен, какую структуру вы ищете. map в вашем первом примере уже возвращает список хэш-ссылок (каждая версия $ f ).

Если вы просто хотите, чтобы синтаксис был похож на ваш второй пример, то вы были почти правы; вам нужно избавиться от лишней точки с запятой в блоке карты и использовать пару фигурных скобок, чтобы создать анонимную ссылку на хеш.

Что-то вроде:

<*>->display_field($q) } } $rs->all ]};

Я просто всегда использую карту в блочной форме и структурирую код, чтобы его было легко разделить. Хотя вы можете поставить + перед открывающим кудрявым, чтобы использовать форму выражения, действительно ли это так важно для вас?

Помимо всего прочего, ваш первый пример выглядит хорошо. Двигайтесь дальше и решайте реальные проблемы. :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top