Los términos Perl me confunden y no es mi lengua materna, así que tengan paciencia conmigo. Trataré de usar los términos correctos, pero daré un ejemplo solo para estar seguro.¿Por qué Perl no me permite desreferenciar un miembro de una referencia hash en una matriz?
Tengo una referencia hash en la variable $ foo. Digamos que $ foo -> {'bar'} -> {'baz'} es una referencia de matriz. Es decir, puedo obtener el primer miembro de la matriz asignando $ foo -> {'bar'} -> {'baz'} -> [0] a un escalar.
cuando hago esto:
foreach (@$foo->{'bar'}->{'baz'})
{
#some code that deals with $_
}
me sale el error "No es una referencia a un array en la línea 41 script.pl"
Pero cuando hago esto funciona:
$myarr = $foo->{'bar'}->{'baz'};
foreach (@$myarr)
{
#some code that deals with $_
}
¿Hay algo que no entiendo? ¿Hay alguna manera de que pueda obtener el primer ejemplo para trabajar? Probé envolviendo la expresión entre paréntesis con el @ en el exterior, pero eso no funcionó. Gracias de antemano por la ayuda.
El analizador tiene que entender lo que quieres decir, y la sintaxis que intentas al principio va cosas que quieres desreferenciar @ $ foo, que no puedes en tu caso. Se trata de cómo diferentes tokens se unen a las cosas que los rodean. Tenemos una explicación más larga en _Intermediate Perl_. :) –