Tengo una tabla resumen anidada que tiene este aspecto:¿Puede "existe" Can Perl modificar los valores de la estructura de datos?
my %myhash = (
"val1" => {
"A/B.c" => {
"funct1" => 1
}
},
"val2" => {
"C/D.c" => {
"funct2" => 1
}
}
)
Mi objetivo con esta estructura de datos es producir valores diferentes en función de si existen ciertas tablas hash. Por ejemplo,
sub mysub
{
my $val = shift;
my $file = shift;
my $funct = shift;
if (exists $myhash{$val}{$file}{$funct}) {
return "return1";
}
if (exists $myhash{$val}{$file}) {
return "return2";
}
return "return3";
}
El comportamiento que encuentro es el siguiente. Tengo una instancia en el tiempo cuando my $ val = "val1"; my $ file = "C/D.c"; my $ funct = "funct3";
En este punto en el tiempo, el valor de retorno me sale "return2". Estas son mis observaciones con el depurador de Perl:
- rotura en un primer momento "si" en mysub
- Imprimir p $ {proxToBugs "val1" {} "C/D.C."} ==> Devuelve línea en blanco. Bueno. Continúa y se omite este "si".
- Continuar y romper en el segundo "si" en mysub
- Imprimir p $ proxToBugs {"val1"} {"C/D.c"} ==> Devuelve "HASH (0x ...)". WTF momento. La función devuelve "return2".
Esto me dice que ejecutar el primero si se modificó la estructura de datos, lo que permite que el segundo pase si en realidad no debería. La función que estoy ejecutando es idéntica a la función que se muestra arriba; este solo está desinfectado ¿Alguien tiene una explicación para mí? :)
Confirmado ... Todavía tengo mucho que aprender en Perl I do. Esto me estaba volviendo loco durante más de media hora. ¡Gracias! – danns87