我有兩個哈希,具有相同的鍵和不同的值。具體而言,它們是兩個不同SNMP查詢的結果,用於恢復交換機上的MAC地址和網橋端口ID。兩者的密鑰是相同的,並且是與查詢的每一行的值一起返回的SNMP字符串。使用密鑰在Perl中加入兩個哈希?
I.e.的MAC地址散列將有一個鍵/值對下面的:
17.4.3.1.1.0.37.17.87.107.181/00 25 11 57 6B B5
鑑於網橋端口散列將具有對應的鍵/值對:
17.4.3.1.1.0.37.17.87.107.181/56
這是在哈希值中的所有條目真。
我認爲這將是拉動值從每個哈希左側的SNMP字符串,並把它們放入一個新的簡單的事情。但是,下面的代碼:
foreach $curSnmpId (@macKeys){
#Keys for macAddrHash and bridgePortHash are identical,
#so code below should pull corresponding entries out of
#each and put into macBridgeHash
my $curMacAddr = $macAddrHash{$curSnmpId};
my $curBridgeId = $bridgePortHash{$curSnmpId};
print "curSnmpId: $curSnmpId curMacAddr: $curMacAddr curBridgeId: $curBridgeId\n";
$macBridgeHash{$curBridgeId} = $curMacAddr;
}
提供了以下的輸出:
curSnmpId: 17.4.3.1.1.0.37.17.87.107.181 curMacAddr: 00 25 11 57 6B B5 curBridgeId: curSnmpId: 17.4.3.1.1.0.0.116.250.193.119 curMacAddr: 00 00 74 FA C1 77 curBridgeId: curSnmpId: 17.4.3.1.1.0.35.24.202.193.125 curMacAddr: 00 23 18 CA C1 7D curBridgeId:
我已經檢查了橋端口散得到了它的數據。我也注意到,當我在地方@macKeys的使用按鍵從橋上端口散,我得到的curBridgeId,但沒有curMacAddr。
鑑於$ curSnmpId(例如17.4.3.1.1.0.37.17.87.107.181)的值存在在這兩個哈希的關鍵,爲什麼不是我的代碼工作?我一直在Google上搜索,搜索,並在最後一天左右抨擊我的頭,並非常感謝任何幫助。
問候, tbdanny
您的輸出指示在兩個散列中都不存在鍵「17.4.3.1.1.0.37.17.87.107.181」。也許其中一個鍵嵌入了空格,換行符或NULL字節? 嘗試單步執行調試程序,或使用'Data :: Dumper'檢查'\%macAddrHash'和'\%bridgePortHash'。 – mob 2012-01-13 00:12:22