[前へ]   [目次へ]   [次へ]

スコープ(Perl)


Perlでのスコープは、変数の有効範囲を表します。

Perlの変数スコープは、通常「グローバル」になります。
「グローバル」スコープを持つ変数は、サブルーチンを越えてプログラム全体で共有されます。

プログラムが小規模なうちはサブルーチン呼び出し時にいちいち指定する必要がないため、
「グローバル」スコープは便利なのですが規模がある程度大きくなると、
プログラム全体で共有されるが故に、気付かない内に他の箇所で変更される事故が起こりやすくなります。

このタイプの事故は原因座標の特定、修正が難しくなりやすいため、
あまり「グローバル」スコープを乱用しない方がいいでしょう。


「グローバル」スコープの他に「レキシカル」スコープがあります。
変数スコープを「レキシカル」にするには、変数を「my」で宣言する必要があります。

「レキシカル」スコープを持つ変数は、それが宣言されたブロックの終点で消滅するようになります。
リファレンスによって拘束されている場合は消えないようですが・・・
また、同名の「グローバル」スコープの変数があった場合、「レキシカル」スコープの変数が消滅するまで、
見えなくなりアクセスできません。(値は別々に保持されています)


また、これらのスコープ指定は、ソースコードの可読性(読みやすさ)にも影響を与えます。
「グローバル」スコープはそのプログラムの頭から読んでいかないと、その意味を理解できません。
「レキシカル」スコープは該当範囲だけでその意味を理解できます。
ただ、「レキシカル」スコープは初期化処理が絡むため、
数十行程度で他のファイルへの依存もないような非常に小規模なプログラムでは「グローバル」の方が読みやすいこともあります。


[前へ]   [目次へ]   [次へ]

プログラミング講座 総合目次

最終更新 2008/10/17