Perl中的局部變量分配的內存位置在數組中存在多長時間(對於數組,哈希和標量)?例如:Perl的範圍和局部變量的生命
sub routine
{
my $foo = "bar";
return \$foo;
}
函數返回後仍然可以訪問內存中的字符串"bar"
嗎?它會活多久,它是否類似於C中的靜態變量,或者更類似於堆中聲明的變量?
基本上,這在這種情況下是否有意義?
$ref = routine()
print ${$ref};
Perl中的局部變量分配的內存位置在數組中存在多長時間(對於數組,哈希和標量)?例如:Perl的範圍和局部變量的生命
sub routine
{
my $foo = "bar";
return \$foo;
}
函數返回後仍然可以訪問內存中的字符串"bar"
嗎?它會活多久,它是否類似於C中的靜態變量,或者更類似於堆中聲明的變量?
基本上,這在這種情況下是否有意義?
$ref = routine()
print ${$ref};
是,該代碼將正常工作。
Perl使用reference counting,所以只要有人提到它,變量就會存活。 Perl的lexical variables有點像C的自動變量,因爲它們通常在離開作用域時就會消失,但它們也像堆中的變量,因爲你可以返回一個引用,它就會工作。
它們不像C的靜態變量,因爲每次調用routine
(即使是遞歸)時都會得到新的$foo
。 (Perl 5.10引入了state
variables,它們更像是一個C static。)
謝謝你幫助我:-) – rubixibuc 2011-04-15 06:21:14
你試過這段代碼嗎?你至少可以自己回答第一個問題。 – runrig 2011-04-15 14:42:46
@runrig,「它碰巧在這個特定情況下工作」和「這實際上應該工作」之間有區別。運行代碼只會告訴你第一個。 – cjm 2011-04-15 17:16:17