【发布时间】:2016-11-28 15:11:43
【问题描述】:
我有两个代码部分,分别是 Perl 和 C。这是关于 Perl 的 my 变量和 C 的自动变量。在某种程度上,它们非常相似,因为它们每次进入函数时都会被初始化。但是 Perl 可以引用子程序的my 变量,如果这样做,C 会得到随机值,因为函数调用堆栈在返回后被破坏。有人知道 Perl 是如何实现这个功能的吗?不可能让每个子程序调用堆栈都保持不变,是不是 Perl 分配了在“数据段”中的子程序中创建的每个 my 变量(与堆栈相比)?
Perl 代码:
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;
}
谢谢,
【问题讨论】:
标签: perl reference return subroutine