大域変数と局所変数

変数には使用できる範囲があります。この範囲のことをスコープといいます。プログラム全体で使える変数のことを大域変数といい、サブルーチン内などの一部分でしか使えない変数を局所変数といいます。プログラムの再利用性を考えると、サブルーチン内ではなるべく大域変数を使用しない方が良いとされています。必要な場合には、引数や戻り値を使いましょう。

Perlの局所変数としては、local変数とmy変数があります。local変数は、別のサブルーチンからの利用ができますが、my変数は定義したサブルーチンの中のみの利用となります。

(例) 大域変数と局所変数のサンプルプログラム(my変数使用)

プログラム

$x=123; 
$y="abc";

&henko; # サブルーチン&henko呼び出し

print "main: x=$x y=$y\n"; # サブルーチン実行後のメインルーチンの値を表示

sub henko {
    my $y;
    $x=456; # 大域変数$xに代入
    $y="def"; # my変数$yに代入
    print "sub : x=$x y=$y\n"; # サブルーチン内の値を表示
}

実行結果

sub : x=456 y=def
main: x=456 y=abc    

サブルーチンで変数$x、$yの値が代入されてますが、ここでの$yは局所変数なので大域変数の$yには影響を与えていないことがわかります。