Perl范围和局部变量的生命

rub*_*buc 11 perl lexical-scope

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

sub routine
{  
  my $foo = "bar";  
  return \$foo;  
}  
Run Code Online (Sandbox Code Playgroud)

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

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

$ref = routine()  
print ${$ref};
Run Code Online (Sandbox Code Playgroud)

cjm*_*cjm 21

是的,该代码将正常工作.

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

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

  • 感谢你们对我的帮助 :-) (2认同)