나는 Perl과 C에서 두 개의 코드 섹션을 가지고있다. 이것은 Perl의 my
변수와 C의 자동 변수에 관한 것이다. 어느 정도까지는 기능에 들어갈 때마다 초기화된다는 점에서 상당히 유사합니다. 그러나 Perl은 서브 루틴 변수 my
을 참조 할 수 있습니다. 반환하면 함수 호출 스택이 파괴되므로 C가 임의의 값을 가져옵니다. Perl이이 기능을 구현하는 방법을 아는 사람은 누구입니까? 그것은 모든 서브 루틴 호출 스택을 그대로 유지할 수 없습니다. Perl은 "데이터 세그먼트"(스택과 비교)의 서브 루틴에서 생성 된 모든 my
변수를 할당합니다.Perl은 서브 루틴의 private 변수에 대한 전역 참조를 어떻게 구현합니까?
펄 코드 :
use strict;
use warnings;
my $ref;
sub func
{
my $str = "hello";
$ref = \$str;
}
func;
print "value is ";
print "${$ref}\n";
C 코드 :
#include <stdio.h>
int *pi;
void func(void)
{
int j = 9;
pi = &j;
}
int main(void)
{
func();
printf("value is ");
printf("%d\n", *pi);
return 0;
}
감사합니다, 당신은 함수에서 로컬로 생성 된 일부 데이터에 참조에 전역 변수를 설정하는
안녕하세요 @ Thilo 참조 카운트를 서브 루틴의 내 변수에 사용할 수있게하려면 참조되는 경우 내 변수가 데이터 세그먼트에 저장된다는 의미입니까? 그리고 그것이 참조되지 않으면 스택에 저장됩니까? – password636
필자는 Perl의 모든 변수가 자동 스택이 아닌 관리 된 힙 영역에 할당된다고 생각합니다. 서브 루틴이 종료되면 모든 로컬 변수에 대한 참조 카운트가 감소하고, 다른 참조를 작성하지 않으면 일반적으로 0이됩니다. 이것은 Java에서 객체를 사용하는 것과 같습니다 (스택에 할당 될 수 있고 C 예에서와 비슷합니다). – Thilo