2013-06-20 3 views
2

해시가있는 해시가 있습니다.해시가있는 액세스 해시

'0'값만 반복하고 싶습니다.

내가 사용할 수 :

foreach my $key (keys(%myhash{0})) ## does not work 

직접 어떻게 든 값에 액세스 내가 액세스 할 수

$VAR1 = { 
    '1' => { 
    '192.168.1.1' => '192.168.1.38' 
    }, 
    '0' => { 
    '192.168.32.6' => '192.168.32.43' 
    } 
}; 

유일한 방법은 두 foreach my $key (keys(%myhash)) 루프를 만드는 것입니다? 당신이 해시 키와 같은 연속적인 정수를 사용하는 경우

감사

모든
+2

['perlreutut'] (http : // perldoc .perl.org/perlreftut.html) 및 ['perldsc'] (http://perldoc.perl.org/perldsc.html)? – amon

+0

중첩 된 (?)'''foreach''' 루프에 대한 코드를 삽입 할 수 있습니까? 이는 여기에서 논의 된 두 가지 접근 방법을 설명하고 대조하는 데 도움이 될 것입니다. 즉,'''5.14'' 및 이후 버전은 직접 참조를 취할 수 있지만 이전 버전에서는 참조 취소 단계 (따라서 이중 루프)가 필요합니다. –

답변

3

먼저, 다음은 대신 배열을 사용해야 가능성이 높습니다.

0에 해당하는 해시 값은 스칼라 값이기 때문에 $dhcpoffers{0}입니다. %dhcpoffers{0}은 구문 오류 일뿐입니다. 펄 5의 버전 14 이후

my $offer_0 = $dhcpoffers{0}; 
for my $key (keys %$offer_0) { ... } 

을 선호하는 경우

당신은,

for my $key (keys %{ $dhcpoffers{0} }) { ... } 

이 필요하거나, keys 해시에게 참조을 받아 들일 것이다, 그래서 당신은 많이 쓸 수 있습니다 클리너

for my $key (keys $dhcpoffers{0}) { ... } 
+0

고마워. 나는 (1)을 가졌다 고 생각했지만 아마도 그렇지는 않을 것입니다 :) – Stef

+0

쿨! 나는 5.16.3을 가지고 있지만 당신이 말하는 것을하기 위해''열쇠''를 얻을 수는 없지만. 설명하기 위해 답을 약간 확대/개선 할 수 있습니까? –

+0

@ G.Cito : 죄송합니다. 코드 마지막 줄에 오타가있었습니다. 지금 시도해보십시오. – Borodin

관련 문제