경험상 필요에 가장 적합한 기능을 사용하는 것이 좋습니다.
키만 원하고 값을 읽지 않으 려면 keys ()를 사용하십시오.
foreach my $key (keys %hash) { ... }
값만 원하면 values ()를 사용하십시오.
foreach my $val (values %hash) { ... }
키 와 값 이 필요하면 each ()를 사용하세요.
keys %hash; # reset the internal iterator so a prior each() doesn't affect the loop
while(my($k, $v) = each %hash) { ... }
반복 중에 현재 키를 삭제하는 것을 제외하고 어떤 방식 으로든 해시의 키를 변경하려는 경우 each ()를 사용하지 않아야합니다. 예를 들어, 값이 두 배인 새로운 대문자 키 세트를 만드는이 코드는 keys ()를 사용하여 잘 작동합니다.
%h = (a => 1, b => 2);
foreach my $k (keys %h)
{
$h{uc $k} = $h{$k} * 2;
}
예상되는 결과 해시 생성 :
(a => 1, A => 2, b => 2, B => 4)
그러나 each ()를 사용하여 동일한 작업을 수행합니다.
%h = (a => 1, b => 2);
keys %h;
while(my($k, $v) = each %h)
{
$h{uc $k} = $h{$k} * 2; # BAD IDEA!
}
예측하기 어려운 방식으로 잘못된 결과를 생성합니다. 예를 들면 :
(a => 1, A => 2, b => 2, B => 8)
그러나 이것은 안전합니다.
keys %h;
while(my($k, $v) = each %h)
{
if(...)
{
delete $h{$k}; # This is safe
}
}
이 모든 것은 perl 문서에 설명되어 있습니다.
% perldoc -f keys
% perldoc -f each