11

Perl 中的局部变量分配的内存位置可以存活多长时间(对于数组、散列和标量)?例如:

sub routine
{  
  my $foo = "bar";  
  return \$foo;  
}  

函数返回后还能访问"bar"内存中的字符串吗?它会存在多久,它类似于 C 中的静态变量还是更像是在堆外声明的变量?

基本上,这在这种情况下有意义吗?

$ref = routine()  
print ${$ref};
4

1 回答 1

21

是的,该代码可以正常工作。

Perl 使用引用计数,因此只要有人引用它,该变量就会存在。Perl 的词法变量有点像 C 的自动变量,因为它们通常会在你离开作用域时消失,但它们也像堆上的变量,因为你可以返回一个对它的引用并且它会正常工作。

它们不像 C 的静态变量,因为$foo每次调用时都会得到一个新变量routine(甚至是递归的)。(Perl 5.10 引入了statevariables,这很像 C 的静态变量。)

于 2011-04-15T06:11:06.997 回答