2011-04-15 16 views
10

Perl中的局部變量分配的內存位置在數組中存在多長時間(對於數組,哈希和標量)?例如:Perl的範圍和局部變量的生命

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

函數返回後仍然可以訪問內存中的字符串"bar"嗎?它會活多久,它是否類似於C中的靜態變量,或者更類似於堆中聲明的變量?

基本上,這在這種情況下是否有意義?

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

你試過這段代碼嗎?你至少可以自己回答第一個問題。 – runrig 2011-04-15 14:42:46

+3

@runrig,「它碰巧在這個特定情況下工作」和「這實際上應該工作」之間有區別。運行代碼只會告訴你第一個。 – cjm 2011-04-15 17:16:17

回答

21

是,該代碼將正常工作。

Perl使用reference counting,所以只要有人提到它,變量就會存活。 Perl的lexical variables有點像C的自動變量,因爲它們通常在離開作用域時就會消失,但它們也像堆中的變量,因爲你可以返回一個引用,它就會工作。

它們不像C的靜態變量,因爲每次調用routine(即使是遞歸)時都會得到新的$foo。 (Perl 5.10引入了state variables,它們更像是一個C static。)

+2

謝謝你幫助我:-) – rubixibuc 2011-04-15 06:21:14