lexical scope (レキシカルスコープ)

変数の有効範囲

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 どう違う? ~」もぜひご覧ください。