remote query example all perl hash

perl - query - mongodump windows



¿Cómo utilizar foreach con una referencia hash? (4)

Como otros han declarado, debe desreferenciar la referencia. La función de keys requiere que su argumento comience con un % :

Mi preferencia:

foreach my $key (keys %{$ad_grp_ref}) {

De acuerdo con Conway :

foreach my $key (keys %{ $ad_grp_ref }) {

Adivina a quién debes escuchar ...

Es posible que desee leer la Documentación de referencia de Perl .

Si te encuentras haciendo muchas cosas con referencias a hashes y hashes de listas y listas de hash, es posible que quieras empezar a pensar en utilizar Object Oriented Perl . Hay muchos buenos tutoriales en la documentación de Perl.

Tengo este código

foreach my $key (keys %ad_grp) { # Do something }

que funciona

¿Cómo sería el mismo, si no tengo %ad_grp , sino una referencia, $ad_grp_ref , al hash?



Entonces, con Perl 5.20, la nueva respuesta es:

foreach my $key (keys $ad_grp_ref->%*) {

(que tiene la ventaja de trabajar de forma transparente con expresiones más complicadas:

foreach my $key (keys $ad_grp_obj[3]->get_ref()->%*) {

etc.)

Ver perlref para la documentación completa.

Nota: en Perl versión 5.20 y 5.22, esta sintaxis se considera experimental, por lo que necesita

use feature ''postderef''; no warnings ''experimental::postderef'';

en la parte superior de cualquier archivo que lo use. Perl 5.24 y posteriores no requieren ningún pragma para esta función.


foreach my $key (keys %$ad_grp_ref) { ... }

Perl::Critic y daxim recomiendan el estilo

foreach my $key (keys %{ $ad_grp_ref }) { ... }

por preocupaciones de legibilidad y mantenimiento (para que no tenga que pensar mucho sobre qué cambiar cuando necesita usar %{ $ad_grp_obj[3]->get_ref() } lugar de %{ $ad_grp_ref } )