2011-04-15 16 views
10

Perl'de yerel bir değişken tarafından ayrılan bellek konumu ne kadar süreyle (hem diziler, hem de skalerler için) yaşıyor? Örneğin: işlevi döndürdü sonraPerl kapsamı ve yerel değişkenlerin ömrü

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

hala bellekte dize "bar" erişebilir mi? Ne kadar süreyle yaşayacak, ve C veya daha fazla statik bir değişkene benzer bir değişkenin açığa çıkardığı bir değişken gibi mi?

Temel olarak, bu bağlamda mantıklı mıdır?

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

Bu kodu denediniz mi? En azından ilk soruya kendin cevap verebilirdin. – runrig

+3

@runrig, "bu özel durumda işe yarayacak" ve "bunun aslında çalışması gerekiyor" arasında bir fark var. Kodu çalıştırmak sadece ilkini size söyleyecektir. – cjm

cevap

21

Evet, bu kod düzgün çalışacaktır.

Perl, reference counting'u kullanır; bu nedenle, değişkenin bir başkası referans aldığı sürece yaşayacaktır. Perl's lexical variables, C'nin otomatik değişkenleri gibidir, çünkü bunlar genellikle kapsamı terk ettiğinizde giderler, fakat aynı zamanda öbek üzerinde bir değişken gibi de olabilirler, çünkü bir referansa geri dönebilirsiniz ve sadece çalışır.

C'nin statik değişkenleri gibi değiller, çünkü her numaralı telefonu bulursanız, her defasında routine (yinelemeli olarak) çağırırsınız. (Perl 5.10, bir C statik gibi olan state variables'u tanıttı.)

+2

Bana yardım ettiğin için teşekkür ederim :-) – rubixibuc