4
서브 루틴의 변수가 메모리를 해제하는시기와 방법에 대한 질문이 있습니다. 스크립트는 예이다 :Perl 서브 루틴의 변수가 메모리를 해제하지 않습니다.
#!perl/bin/per
use strict;
sub A{
my $x= shift;
return ([$x]);
}
for my $i (1..10){
my $ref= &A($i);## the input changes in each round
my $ref2= &A(9);## the input is fixed in each round
print "$ref\t";
print "$ref2\n";
}
하고 화면에 출력 하였다 :
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
ARRAY(0x996e98) ARRAY(0x9b50c8)
내가 참조가 서브 루틴 A는 한번 이상 호출 될 때 변경 될 것을 기대하지만, 출력 입력이 언제 변경되었는지에 관계없이 참조가 수정되었습니다. 그 현상은 전체 스크립트가 끝날 때까지 서브 루틴에서 변수가 차지하는 메모리를 공개 할 수 없다고 추측 할 수 있습니까? 그렇지 않으면 내 결과가 비정상입니까?