2011-08-07 18 views
7

A continuación se muestra una generalización de un bloque de código que sigo teniendo que escribir cuando quiero construir un hash de matrices dentro de una especie de bucle.Taquigrafía para agregar nuevos valores a un hash de matrices

#get value and key that I want to use 
my $value = getvalue(); 
my $key = getKey(); 

#add value to hash using key 
if($hash_of_arrays{$key}){ 
    push(@{$hash_of_arrays{$key}}, $value); 
} 
else{ 
    $hash_of_arrays{$key} = [$value]; 
} 

La sentencia if es muy tedioso de escribir para una tarea tan simple, pero hay que hacer, ya que empuja un valor cuando su llave no está definida en el hash causa problemas. Me pregunto si hay alguna abreviatura para escribir esto, una donde no tengo que escribir $hash_of_arrays{$key} tres veces.

Respuesta

14

push @{ $HoA{$key} }, $value; funciona perfectamente bien y es lo que se recomienda hacer. Si su código que lo usa tiene "problemas", entonces pregunte sobre esos problemas.

+0

Bueno, ahora no estoy muy seguro de cómo me las arreglé para causar un error la última vez que lo intenté. Pensé que causaba un error de "no una referencia de ARRAY", pero eso no parece suceder con las variables no definidas. ¡Gracias! – MattLBeck

+0

No ocurre para undefs, pero sucede si logras poner algo como una cadena en '$ HoA {$ key}' antes de intentar tratarlo como un arrayref :) – hobbs

+2

Este método se llama autovida. Brian d Foy tiene un artículo sobre cómo desactivarlo: http://www.effectiveperlprogramming.com/blog/1256 – shawnhcorey

Cuestiones relacionadas