Прежде всего, вы используете use strict;
и use warnings;
прагмы в своем коде?Это поможет обнаружить синтаксические ошибки, которые вы обычно не видите.
Вам также следует выполнить небольшую проверку ошибок:
foreach my $curSnmpId (sort keys %macAddrHash) {
#
# This will warn you if there's no matching key in %bridgePortHash
#
if (not exists $bridgePortHash{$curSnmpId} {
warn "WARNING: Nonexistant Bridge Port Data at $curSnmpId";
}
print "curSnmpId: $curSnmpId "
print "curMacAddr: $macAddrHash{$curSnmpId} ";
#
# Due to `use warnings`, you'll get an error message if this is undefined
#
print "curBridgeId: $bridgePortHash{$curSnmpId}\n";
}
Таким образом, вы увидите сообщение ПРЕДУПРЕЖДЕНИЕ, еслитам хэш порта моста не имеет тот же ключ, что и в% macAddrHash.Вы получите предупреждение, если запись ключа существует, но значение не определено, когда оно пытается распечатать значение.
Еще одна вещь, которую я бы предложил, это использовать Data :: Dumper , просто чтобы распечатать два хеша и убедиться, что они имеют одинаковый набор ключей:
use Data::Dumper;
[...]
print Dumper ( \%macAddrHash ) . "\n";
print Dumper ( \%bridgePortHash ) . "\n";
Это распечатает всю структуру обоих хешей.Вам придется пройти через это, но это поможет вам понять, где может быть ваша ошибка в вашей структуре данных ..
Еще один полезный трюк для проверки чего-либо подобного - использование Test ::Еще чтобы убедиться, что ваши ключи одинаковы в обоих хешах:
use Test::More tests => 1;
[...]
is_deeply (\@{[sort keys %macAddrHash]}, \@{[sort keys %bridgePortHash]});
У меня такое ощущение, что вы обнаружите, что ваши данные могут не соответствовать вашим ожиданиям.