2011-12-12 12 views

答えて

11

ローカル($ X)は、グローバル変数$ xの古い値を離れて保存し そのサブルーチンから呼び出され、他の機能に見える あるサブルーチンの持続期間のための新しい値を割り当てます。これは実行時に で行われるため、動的スコープと呼ばれます。 local()は常にパッケージ変数または動的変数と呼ばれるグローバル変数 に影響します。

my($ x)は、現在の サブルーチンでのみ表示される新しい変数を作成します。これはコンパイル時に行われるため、字句解析または スタティックスコープと呼ばれます。 my()は常に、 字句変数または(不適切な)静的(有効範囲)変数とも呼ばれる私的変数に影響します。

Perl-FAQ'sを見てみましょう:

+0

ありがとうございました – Anil

+6

"my($ x)は現在のサブルーチンでのみ表示される新しい変数を作成します"。それは本当ではありません。 'my'は現在の*コードブロックでしか見えない新しい変数を作成します。サブルーチンはブロックの一例に過ぎません。あなたは 'local'の定義において同様のエラーを出します。 –

+0

@ O.D http://perldoc.perl.org/perlsyn.html#Basic-BLOCKs – TLP

3

簡単な例を追加します。

$var = "Global"; 

sub inner { 
    print "inner:   $var\n"; 
} 

sub changelocal { 
    my $var = "Local"; 
    print "changelocal: $var\n"; 

    &inner 
} 

sub changedynamic { 
    local $var = "Dynamic"; 
    print "changedynamic: $var\n"; 

    &inner 
} 

&inner 
&changelocal 
&changedynamic 

これは、次の出力(コメントが追加されました)を示します。

ダイナミック変数は、呼び出した関数のグローバルをマスクする方法と考えることができます。レキシカルスコープ変数は、最も近い中カッコ内のコードからしか表示されません。

関連する問題