【问题标题】:Perl scoping and the life of local variablesPerl 作用域和局部变量的生命周期
【发布时间】:2011-08-06 02:11:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你试过这个代码吗?您至少可以自己回答第一个问题。
  • @runrig,“它恰好在这种特殊情况下有效”和“这实际上应该有效”之间存在差异。运行代码只会告诉你第一个。

标签: perl lexical-scope


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2011-12-29
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多