2010-03-25 15 views
5

¿Cómo creo una referencia al valor en una clave hash específica? Intenté lo siguiente pero $$ foo está vacío. Cualquier ayuda es muy apreciada.¿Cómo puedo hacer una referencia al valor hash específico en Perl?

$hash->{1} = "one"; 
$hash->{2} = "two"; 
$hash->{3} = "three"; 

$foo = \${$hash->{1}}; 
$hash->{1} = "ONE"; 

#I want "MONEY: ONE"; 
print "MONEY: $$foo\n"; 
+0

Si sus claves hash son todas enteros positivas, probablemente debería estar utilizando una matriz. – daotoad

Respuesta

5

Active estrictas y advertencias y obtendrá algunas pistas sobre lo que está pasando mal.

use strict; 
use warnings; 

my $hash = { a => 1, b => 2, c => 3 }; 
my $a = \$$hash{a}; 
my $b = \$hash->{b}; 

print "$$a $$b\n"; 

En general, si usted quiere hacer cosas con las rebanadas o que toman referencias , usted tiene que utilizar el viejo estilo, apilados sintaxis sigilo para conseguir lo que desea. Puede encontrar el References Quick Reference útil, si no recuerda los detalles de la sintaxis del sigilo amontonado.

actualización

Como murugaperumal puntos cabo, puede hacerlo my $foo = \$hash->{a}; Juraría que he intentado y no funcionó (para mi sorpresa). Lo atribuiré a la fatiga haciéndome más tonto.

8
use strict; 
use warnings; 
my $hash; 

$hash->{1} = "one"; 
$hash->{2} = "two"; 
$hash->{3} = "three"; 

my $foo = \$hash->{1}; 
$hash->{1} = "ONE"; 
print "MONEY: $$foo\n"; 
Cuestiones relacionadas