У меня есть вложенная хеш-таблица, которая выглядит так:
my %myhash = (
"val1" => {
"A/B.c" => {
"funct1" => 1
}
},
"val2" => {
"C/D.c" => {
"funct2" => 1
}
}
)
Моя цель с этой структурой данных состоит в том, чтобы создавать разные значения на основе наличия определенных хеш-таблиц. Например,
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";
}
Поведение, с которым я сталкиваюсь, выглядит следующим образом. У меня есть пример, когда my $val = "val1" ; my $file = "C/D.c" ; my $funct = "funct3";
В этот момент времени возвращаемое значение получает "return2". Это мои наблюдения с помощью отладчика Perl:
- Сначала перерыв "if" в mysub
- Печать p $proxToBugs { "val1" } { "C/D.c" } == > Возвращает пустую строку. Хорошо. Продолжайте, и это "если" пропущено.
- Продолжить и разбить второй "if" в mysub
- Печать p $proxToBugs { "val1" } { "C/D.c" } == > Возвращает "HASH (0x...)". WTF момент. Функция возвращает "return2".
Это говорит мне, что запускать первый, если изменить структуру данных, которая позволяет второму проходить, когда на самом деле это не должно. Функция, которую я запускаю, идентична функции, показанной выше; этот человек просто дезинфицирован. У кого-нибудь есть объяснение для меня?:)