変数の有効範囲
exical scope (レキシカルスコープ) とは、変数の有効範囲を表す用語です。
とりわけ、Perl のレキシカルスコープは中カッコ({ }
)で囲まれたブロックの範囲を指します。
そのブロックの中で my
を使って定義された変数は、
そのブロックを抜けた時点で破棄されます。
この my
で定義された変数をレキシカル変数と呼びます。
レキシカルスコープは、中カッコ({ }
)で囲まれていれば、あらゆるところで有効です。
if ( $^O eq 'linux' ) {
my $var = 'if ブロックのレキシカルスコープ';
}
for ( my $i = 0 ; $i < 10 ; $i++ ) {
my $var = 'for ブロックのレキシカルスコープ';
}
{
my $var = '単なる中カッコによるブロックのレキシカルスコープ';
}
sub my_func {
my $var = 'サブルーチンのブロックのレキシカルスコープ';
}
上記のブロックの中の変数 $var
は、それぞれまったく別の変数として扱われ、
それぞれのブロックの中だけで有効です。
このおかげで、ブロックが違えば、変数名のバッティングを気にする必要が無くなります。
レキシカルスコープと対照的にダイナミックスコープも存在します。 スコープに関しての詳細は当サイトの記事「変数の局所化 ~ my と local どう違う? ~」もぜひご覧ください。