Perlでのlocalとmyの違い
以前にあまり意識せずにコーディングした際、バグの原因となった経験から知識を共有します。
Perlではmyとlocalによって、一般的に言うところのローカル変数を定義する事が可能です。
しかし、この2つの命令、一体何が違うのでしょうか。
my
myは「レキシカルスコープ宣言」を行う関数です。
レキシカルスコープとは、乱暴な言い方ですが「{ }で囲まれた内部」です。
local
localは「ダイナミックスコープ宣言」を行う関数です。
ダイナミックスコープとは、これまた乱暴な言い方ですが「{ }で囲まれた内部が実行されている限り」となります。
つまり、呼び出されたサブルーチン等にも変数が引き継がれるのです。