Perl范围和局部变量的生命

时间:2011-04-15 06:09:18

标签: perl lexical-scope

Perl中的本地变量分配的内存位置有多长(对于数组,散列和标量)?例如:

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

在函数返回后,你仍然可以访问内存中的字符串"bar"吗?它会持续多长时间,它是否类似于C中的静态变量,或者更像是从堆中声明的变量?

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

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

1 个答案:

答案 0 :(得分:21)

是的,该代码可以正常运行。

Perl使用reference counting,因此只要有人引用它,变量就会存在。 Perl的lexical variables有点像C的自动变量,因为它们通常会在你离开范围时消失,但它们也像堆上的变量一样,因为你可以返回一个引用,它只会工作

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