Perl作用域和本地变量的生命周期

12
Perl中的局部变量(包括数组、哈希和标量)分配的内存位置能够存活多久?例如:
sub routine
{  
  my $foo = "bar";  
  return \$foo;  
}  

函数返回后,您仍然可以在内存中访问字符串"bar"吗?它将存在多久,并且它类似于C中的静态变量还是更像堆上声明的变量?

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

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

你试过这段代码吗?你至少可以自己回答第一个问题。 - runrig
4
@runrig,「这个特定情况下它偶然起作用了」和「这实际上是设计时考虑到的」是有区别的。运行代码只会告诉你前者。 - cjm
1个回答

22

是的,那段代码将会很好地工作。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接