he código Perl similar al siguiente:¿Tiene una clave hash no inicializada un valor predeterminado de cero en Perl?
# -- start --
my $res;
# run query to fetch IPv6 resources
while(my $row = $org_ip6_res->fetchrow_arrayref)
{
if($row->[4] =~ /PA/) {
$res->{ipv6}{pa}{$row->[2]}++;
} elsif($row->[4] eq 'PI') {
$res->{ipv6}{pi}{$row->[2]}++;
}
}
# -- stop --
En ningún momento se $res
vez establecido antes de la iteración sobre los resultados de la consulta sin embargo, el código se ejecuta muy bien.
Cuando coloco declaraciones de impresión antes de cada valor obtengo espacios en blanco en ambos casos, pero si las declaraciones de impresión aparecen después del incremento, obtengo un valor de> = 1 según la cantidad de recursos de IPv6 que tenga la organización.
Mi pregunta es, ¿considero que una clave de hash no inicializada en Perl tiene automáticamente un valor de cero?
Lo siento si aparece como una pregunta novato, pero yo no estoy familiarizado con una construcción de tales decir $hashref->{foo}->{bar}++
donde un valor aún no se ha asignado explícitamente a $hashref->{foo}->{bar}
. ¡Gracias por adelantado!
La palabra clave exists prueba para ver si la clave está en el hash, no si el valor es undef. use Test :: More tests => 4; my% h = ('a'); ok (existe $ h {a}); ok (! Defined $ h {a}); ok (! Exists $ h {b}); ok (! Defined $ h {b}); – Axeman
Lo sé. El punto es que él necesita entender la auto-confirmación y la diferencia entre una clave que existe pero que no está definida y una clave indefinida y cómo lidiar con cada una, todo lo cual entenderá si sigue el enlace que proporcioné y lee el documentación sobre la palabra clave exists. –