2
我正試圖訪問哈希中的哈希,並通過它循環以獲取值。這裏是一個數據的例子Perl在哈希中訪問哈希,並循環遍歷每個哈希以提取值
$VAR1 = {
'24.40.53.143' => {
'ServStat' => {
'1.18.118.115.95.99.119.98.98.112.109.45.97.112.95.104.116.116.112.115' => 'vs_cgggbpm-ap_https',
'1.17.118.115.95.99.119.98.115.102.97.45.97.112.95.104.116.116.112' => 'vs_cddedsfa-ap_http',
'20.18.118.115.95.99.119.98.116.119.98.45.98.112.95.104.116.116.112.115' => '0',
'19.17.118.115.95.99.119.98.119.115.45.97.112.95.104.116.116.112.115' => '0',
'2.18.118.115.95.99.119.98.116.119.98.45.98.112.95.104.116.116.112.115' => '0',
'24.18.118.115.95.99.119.98.116.119.98.45.97.112.95.104.116.116.112.115' => '0',
'17.17.118.115.95.99.119.98.119.98.45.97.112.95.104.116.116.112.115' => '0',
'29.17.118.115.95.99.119.98.116.119.112.45.98.112.95.104.116.116.112' => '0',
我想循環'ServStat'並提取每個值。我將如何引用散列「ServStat」,以便我可以對內容進行初始化?這樣的事情:
foreach {ServStat} {
my ($num, $char, $vs) = (/(\d+)\.(\d+)\.(.+)/);
if ($num == 1) {
print {ServStat}->$value
}
}
在此先感謝您的任何建議,您可以提供!
你並不真正需要的{}除非你提領的東西包含索引,例如,鑰匙%{$數據 - > {24.40.53.143} {ServStat}}; – runrig
感謝您抽出時間發表回覆。您的解決方案非常有幫助。我確實必須在散列周圍使用引號,如下所示:my $ ServStat = $ data - > {'24.40.53.143'} {'ServStat'};再次感謝您的幫助!! – dars33
@dars - 「簡單」字符串(例如包含字母/數字/下劃線)的引號是可選的。所以第一個密鑰(IP)需要在'use strict;'下引用,而第二個密鑰不能 - 請參閱http://stackoverflow.com/questions/2647425/how-can-i-use-a-perl- hash-key-that-has-a-literal-dot。然而,即使不需要時總是認爲總是單引號是好的做法 - 請參閱http://stackoverflow.com/questions/401556/are-quotes-around-hash-keys-a-good-practice-in-perl – DVK