Perl 中的局部变量分配的内存位置可以存活多长时间(对于数组、散列和标量)?例如:
sub routine
{
my $foo = "bar";
return \$foo;
}
函数返回后还能访问"bar"
内存中的字符串吗?它会存在多久,它类似于 C 中的静态变量还是更像是在堆外声明的变量?
基本上,这在这种情况下有意义吗?
$ref = routine()
print ${$ref};
Perl 中的局部变量分配的内存位置可以存活多长时间(对于数组、散列和标量)?例如:
sub routine
{
my $foo = "bar";
return \$foo;
}
函数返回后还能访问"bar"
内存中的字符串吗?它会存在多久,它类似于 C 中的静态变量还是更像是在堆外声明的变量?
基本上,这在这种情况下有意义吗?
$ref = routine()
print ${$ref};
是的,该代码可以正常工作。
Perl 使用引用计数,因此只要有人引用它,该变量就会存在。Perl 的词法变量有点像 C 的自动变量,因为它们通常会在你离开作用域时消失,但它们也像堆上的变量,因为你可以返回一个对它的引用并且它会正常工作。
它们不像 C 的静态变量,因为$foo
每次调用时都会得到一个新变量routine
(甚至是递归的)。(Perl 5.10 引入了state
variables,这很像 C 的静态变量。)