11

Perlのローカル変数によって割り当てられたメモリ位置はどのくらいの期間存続しますか(配列、ハッシュ、スカラーの両方)?例えば:

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

"bar"関数が戻った後も、メモリ内の文字列にアクセスできますか?それはどのくらいの期間存続しますか、そしてそれはCの静的変数に似ているか、それともヒープから宣言された変数に似ていますか?

基本的に、これはこの文脈で意味がありますか?

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

1 に答える 1

21

はい、そのコードは正常に機能します。

Perlは参照カウントを使用するため、誰かがその変数への参照を持っている限り、変数は存続します。Perlの字句変数は、スコープを離れると通常はなくなるため、Cの自動変数のようなものですが、1つの参照を返すことができ、それが機能するため、ヒープ上の変数のようなものでもあります。

これらはCの静的変数とは異なります。これは、$foo呼び出すたびにroutine(再帰的にも)新しい変数を取得するためです。(Perl 5.10では、C静的に似たstate変数が導入されました。)

于 2011-04-15T06:11:06.997 に答える