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?
En Perl 5.14 (funciona ahora en Perl 5.13), podremos simplemente usar claves en la referencia de hash
use v5.13.7;
foreach my $key (keys $ad_grp_ref) {
...
}
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 }
)