Mam zagnieżdżonej tabeli mieszania, który wygląda tak:Czy "istnieje" Perla modyfikuje wartości struktury danych?
my %myhash = (
"val1" => {
"A/B.c" => {
"funct1" => 1
}
},
"val2" => {
"C/D.c" => {
"funct2" => 1
}
}
)
Moim celem w tej strukturze danych ma produkować różne wartości w zależności od tego, czy istnieją pewne tabele hash. Na przykład:
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";
}
Zachowanie, które napotykam, jest następujące. Mam instancji w czasie, gdy my $ val = "val1"; my $ file = "C/D.c"; my $ funct = "funct3";
W tym momencie zwracana jest wartość "return2". To są moje obserwacje z debuggera Perl:
- Przerwa w pierwszych "jeśli" w mysub
- Drukuj p $ proxToBugs { "val1"} { "C/D.C."} ==> Zwraca pusty wiersz. W porządku. Kontynuuj, a to "jeśli" jest pomijane.
- Kontynuuj i rozbij na sekundę "if" w mysub
- Drukuj p $ proxToBugs {"val1"} {"C/D.c"} ==> Zwraca "HASH (0x ...)". WTF moment. Funkcja zwraca "return2".
To mówi mi, że po uruchomieniu pierwszej, jeśli zmodyfikowano strukturę danych, która pozwala na drugą operację, gdy w rzeczywistości nie powinna. Funkcja, którą wykonuję, jest identyczna z funkcją pokazaną powyżej; ten jest po prostu zdezynfekowany. Czy ktoś ma dla mnie wyjaśnienie? :)
Potwierdzona ... Nadal mam dużo do nauczenia się w Perlu, który robię. Ta sprawa doprowadzała mnie do szału przez ponad pół godziny. Dzięki! – danns87