2.2. スコープ

C言語等の「スコープ」とほぼ同義であり,スコープは変数定義の有効範囲のようなものである. {, }複文の項目参照) により新たなスコープを作成することができ, {, }内でlocal文により 変数を定義すると,その変数はスコープ外からはアクセスできない. また,スコープの外である変数$fooが定義されている状態で 内側のスコープで同じ名前の変数$fooを定義した場合, $fooを参照すると内側のスコープでの定義が参照される. さらに,コンテキストはそれ自体がひとつのスコープになっている.

$a = 10;
$b = 1.23; 
{
 local $a = "a";  1
 $b = 100;        2
 $c = "abc";      3
 sys.println($a); 4
}
sys.println($a);  5
sys.println($b);  6
      
1

内側のスコープ内で新たな変数$aが定義される

2 local文でない場合は,外側のスコープに変数の定義があればそちらに代入される. この場合は,外側スコープの$bに100が代入される.
3

この場合は,外側のスコープに$cが定義されていないので, 暗黙的に内側のスコープに$cが定義されて代入される.

4

文字列"a"が参照される

5

数値10が代入されている外のスコープの$aは影響されない

6

数値100が代入されている.

このように,local文を使わずに未定義変数への代入を行うと 知らず知らずのうちに外側スコープの変数の値を破壊してしまう可能性があるので 注意が必要である.