/ / Hash no pasa correctamente entre funciones - perl

El hash no pasa correctamente entre funciones - perl

Configuré un hash de usuario en una función con lo siguiente,

push @{$profile{$index}{$infoName}}, $information

e imprimirlo usando print Dumper(%profile); index++; en la función que se configuró, imprime cada uno de los índices

`$VAR1 = { "374" => { "degree" => [ "CS" ], "birthdate" => [ "1973/12/13" ], "gender" => [ "M" ],...}

$VAR1 = { "375" => { "degree" => [ "CS" ], "birthdate" => [ "1933/02/03" ], "gender" => [ "F" ],...}`

cuando intento acceder a esto dentro del bucle foreach de otra función usando print "${$profile{$currIndex}{"gender"}}"; Obtengo un comportamiento extraño donde la impresión devuelve una cadena vacía y aparecen algunos números aleatorios en el hash: "$VAR1 = { "4" => {}, "1" => {}, "3" => {}, "2" => {}, "378" => { "birthdate" => [ "1961/03/29" ], "gender" => ["F"],..}

¿Cómo puedo acceder correctamente al campo de género desde un bucle?

Respuestas

0 para la respuesta № 1

push @ {$ profile {$ index} {$ infoName}}, $ información;

print "$ {$ profile {$ currIndex} {" gender "}}";

Ni siquiera estoy seguro de lo que realmente hace la segunda línea. En mi Ubuntu, Perl produce un error: no es una referencia escalar.

Lo que quieres es imprimir todos los elementos de la matriz:

print "@{$profile{$currIndex}{"gender"}}n";

o, para imprimir el primero:

print $profile{$currIndex}->{"gender"}->[0], "n";

El elemento hoja es una matriz de referencias y debe ser desreferenciado como tal.

No estoy seguro de por qué usas las referencias de la matriz. En tus datos de muestra no hay elementos múltiples en las matrices. ¿Probablemente querías escribir simplemente esto?

$profile{$index}{$infoName} = $information;
...
print "$profile{$currIndex}{"gender"}n";