분명히 필요하지 않습니다. 나는 여기서 무슨 일이 일어나고 있는지 궁금해. 내가 누락 된 뭔가 간단? 펄의 모든 버전에서이 동작에 의존 수)
펄 v5.8.8 :
%h = (0=>'zero', 1=>'one', 2=>'two');
while ($k = each %h) {
$v = delete $h{$k};
print "deleted $v; remaining: @h{0..2}\n";
}
출력
deleted one; remaining: zero two
deleted zero; remaining: two
deleted two; remaining:
man perlfunc
(각)을 루프가 계속하면서 그 이유를 설명하지 않습니다 $k
에 0이 할당 된 경우 코드는 while
루프 의 조건이 ($k = each %h, defined $k)
인 것처럼 동작합니다. 예상대로 루프 조건이 실제로 ($k = each %h, $k)
로 변경되면
다음은 $k = 0
에서 실제로 정지한다.
는 또한 each
의 다음 다시 구현을 위해 $k = 0
에서 정지 :
%h = (0=>'zero', 1=>'one', 2=>'two');
sub each2 {
return each %{$_[0]};
}
while ($k = each2 \%h) {
$v = delete $h{$k};
print "deleted $v; remaining: @h{0..2}\n";
}
출력 단지 : 당신은 스칼라 문맥에서 each
를 호출하고
deleted one; remaining: zero two