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'을 통해 반복하고 각 값을 추출하고 싶습니다. 어떻게 내용을 foreach 할 수 있도록 해시 'ServStat'참조 할 것이라고? 다음과 같이 입력하십시오 :
foreach {ServStat} {
my ($num, $char, $vs) = (/(\d+)\.(\d+)\.(.+)/);
if ($num == 1) {
print {ServStat}->$value
}
}
당신이 제공 할 수있는 조언을 미리 주셔서 감사합니다!
당신은 정말 필요하지 않은 {} 당신이 역 참조하고있는 것은 인덱스, 예를 들어, 키를 포함하지 않는 % {$ data -> {24.40.53.143} {ServStat}}; – runrig
회신을 보내 주셔서 감사합니다. 귀하의 솔루션은 매우 도움이되었습니다. 나는 다음과 같이 해시를 따옴표로 묶어야했다. $ 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-a-literal-dot을 사용합니다. 그러나 불필요한 경우에도 항상 작은 따옴표를 사용하는 것이 좋습니다. http://stackoverflow.com/questions/401556/are-quotes-around-hash-keys-a-good-practice-in-perl을 참조하십시오. – DVK