Pregunta

Tengo el siguiente código principalmente correcto:

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

Tengo el siguiente código principalmente correcto:

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

Tengo el siguiente código principalmente correcto:

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

Tengo el siguiente código principalmente correcto:

<*>

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

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

Tengo el siguiente código principalmente correcto:

<*>

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

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

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

->TO_JSON}, display_field =>

Tengo el siguiente código principalmente correcto:

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

Tengo el siguiente código principalmente correcto:

<*>

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

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

Tengo el siguiente código principalmente correcto:

<*>

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

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

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

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

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

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

Tengo el siguiente código principalmente correcto:

<*>

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

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

Solo preferiría que fuera más como lo siguiente:

<*>

Pero eso da un error de sintaxis. ¿Cómo puedo hacer lo que quiero o mi versión actual es la mejor que puedo obtener?

actualización : perdón por el punto y coma extra de antes. Es tarde aqui. No estoy seguro de cómo me lo perdí. Gracias chicos!

¿Fue útil?

Solución

Solo da un error de sintaxis porque Perl cree que necesita omitir la coma después de map {...} , porque analiza ese mapa como un bloque, no como una expresión. Poner + al frente lo arreglará. Además, no puede tener un punto y coma en un hash anónimo:

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

Solo da un error de sintaxis porque Perl cree que necesita omitir la coma después de map {...} , porque analiza ese mapa como un bloque, no como una expresión. Poner + al frente lo arreglará. Además, no puede tener un punto y coma en un hash anónimo:

<*>->TO_JSON}, display_field =>

Solo da un error de sintaxis porque Perl cree que necesita omitir la coma después de map {...} , porque analiza ese mapa como un bloque, no como una expresión. Poner + al frente lo arreglará. Además, no puede tener un punto y coma en un hash anónimo:

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

Otros consejos

El problema es que Perl no mira hacia adelante lo suficiente como para descubrir si { significa " iniciar una referencia hash anónima " o "iniciar un bloque de código". debería (idealmente) mirar el } correspondiente y ver si hay o no una coma, y ??actuar en consecuencia, pero no es así. Solo mira un poco por delante y trata de adivinar. Y esta vez está mal, y obtienes un error de sintaxis sobre una coma que no debería estar allí, excepto que no debería moverse.

perldoc -f map le dirá todo sobre esto. Básicamente, dice que si pones + {, Perl comprenderá que esto significa "no un bloque de código". y supongo que es una referencia hash. Esta es probablemente la causa de su error de sintaxis. Como otra sugerencia, podría funcionar decir el mapa ({HASH STUFF}, $ rs- > all) . Apuesto a que Perl no adivina que es una referencia de código aquí.

No pude hacer que funcione, pero no tengo $ rs o - > TO_JSON o una variable llamada $ q De todos modos, no podía hacer que nada de esto funcionara. Espero que esto ayude. Si no, publica un poco más de código. No te preocupes, no mordemos.

También, mientras estamos en eso, por qué no escribirlo de esta manera:

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

Podría decirse que es más legible, especialmente si agrega muchas cosas a $ results de una vez.

No estoy completamente seguro de qué tipo de estructura estás buscando. El mapa en su primer ejemplo ya devuelve una lista de hashrefs (todas las versiones de $ f ).

Si solo quieres una sintaxis similar a tu segundo ejemplo, entonces casi tuviste razón; necesitas deshacerte del punto y coma extraño en tu bloque de mapa, y utilizar un par de curlies para hacer una referencia de hash anónima.

Algo como:

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

No estoy completamente seguro de qué tipo de estructura estás buscando. El mapa en su primer ejemplo ya devuelve una lista de hashrefs (todas las versiones de $ f ).

Si solo quieres una sintaxis similar a tu segundo ejemplo, entonces casi tuviste razón; necesitas deshacerte del punto y coma extraño en tu bloque de mapa, y utilizar un par de curlies para hacer una referencia de hash anónima.

Algo como:

<*>->TO_JSON}, display_field =>

No estoy completamente seguro de qué tipo de estructura estás buscando. El mapa en su primer ejemplo ya devuelve una lista de hashrefs (todas las versiones de $ f ).

Si solo quieres una sintaxis similar a tu segundo ejemplo, entonces casi tuviste razón; necesitas deshacerte del punto y coma extraño en tu bloque de mapa, y utilizar un par de curlies para hacer una referencia de hash anónima.

Algo como:

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

Siempre uso el mapa en forma de bloque, y estructuro el código para que sea fácil de separar. Aunque puedes poner un + delante de la abertura para usar la forma de expresión, ¿realmente te importa eso?

Aparte de todo lo demás, su primer ejemplo se ve bien. Sigue adelante y resuelve problemas reales. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top