2010-12-09 22 views

Respuesta

7

(Este es el official perlfaq answer, menos las ediciones posteriores)

Hay un par de maneras en que puede procesar un hash entero. Puede obtener una lista de keys, luego examinar cada clave, o tomar un par de clave-valor a la vez.

Para ir a través de todas las teclas, utilice keys function. Esto extrae todas las claves del hash y las devuelve como una lista. A continuación, puede obtener el valor a través de la tecla en particular se está procesando:

foreach my $key (keys %hash) { 
    my $value = $hash{$key} 
    ... 
    } 

Una vez que tenga la lista de claves, puede procesar esa lista antes de procesar los elementos de patata. Por ejemplo, puede ordenar las claves para que pueda procesarlos con el fin de léxico:

foreach my $key (sort keys %hash) { 
    my $value = $hash{$key} 
    ... 
    } 

O bien, es posible que desee solamente para procesar algunos de los artículos. Si sólo quiere tratar con las claves que comienzan con el texto :, puede seleccionar sólo aquellos que utilizan grep:

foreach my $key (grep /^text:/, keys %hash) { 
    my $value = $hash{$key} 
    ... 
    } 

Si el hash es muy grande, puede que no desee para crear una larga lista de claves. Para ahorrar algo de memoria, se puede agarrar un par clave-valor a la vez usando each(), que devuelve un par usted no ha visto todavía:

while(my($key, $value) = each(%hash)) { 
    ... 
    } 

El operador devuelve cada uno de los pares con el fin aparentemente aleatoria, de modo que si para que te importe, tendrás que seguir con el método de las llaves. El operador each() puede ser un poco complicado. No puede agregar o eliminar claves del hash mientras lo está usando sin posiblemente omitir o reprocesar algunos pares después de que Perl vuelva a procesar todos los elementos. Además, un hash tiene solo un iterador, por lo que si usa keys, values o each en el mismo hash, puede restablecer el iterador y desordenar su procesamiento. Vea el each entry en perlfunc para más detalles.

Cuestiones relacionadas