(첫째는, $i
는 전역 변수 안된다. 둘째, 심지어 예에서 이름 $a
및 $b
를 사용하지 마십시오, 그들이 사용하는 특수 변수이기 때문에 sort
의해).
블록 }
의 끝에 도달 할 때 $a
, $b
및 $c
이 해제되기 때문에 그 질문에 대한 순 대답은 아니오하므로 반복의 최종 결과는 메모리 사용에 제로 변화이다.
펄의 실제 구현
도 똑똑하다 : 그것은 그래서 반복적으로 무료로하지 않습니다 다음 동일한 메모리 부분을 재 할당
$a
/
$b
/
$c
의 메모리를 재사용합니다. 물론 변수가 범위를 벗어나지 만 변수가 계속 살아 있기 때문에 루프 본문을 넘어서는 지역 변수 중 하나에 대한 참조를 만들면이를 수행 할 수 없습니다.
이것에 루프를 변경하는 경우가 발생 확인할 수
for my $i (1 .. 5) {
my $x = rand 10;
my $y = rand 10;
my $z = rand 10;
print join(" ", \$x, \$y, \$z), "\n";
}
출력은 메모리 위치의 모든 루프 반복에서 동일 함을 입증
SCALAR(0x4a5788) SCALAR(0x4a5728) SCALAR(0x4a56c8)
SCALAR(0x4a5788) SCALAR(0x4a5728) SCALAR(0x4a56c8)
SCALAR(0x4a5788) SCALAR(0x4a5728) SCALAR(0x4a56c8)
SCALAR(0x4a5788) SCALAR(0x4a5728) SCALAR(0x4a56c8)
SCALAR(0x4a5788) SCALAR(0x4a5728) SCALAR(0x4a56c8)
같을 것이다.
나쁜 것은 아니지만 Perl에서는 가능한 한 변수를 사용하는 곳 가까이에 변수를 선언하는 것이 실제로 바람직합니다. – ThisSuitIsBlackNot