perl/「格納」について〜値の格納と変数名の格納〜

「値を変数に格納する」ってよく聞くし、「定義された変数名のついた箱に値をカポッと入れる」、っていうイメージもできる。でも、定義された変数名ってどんな扱いになってるんだろう、ってこれまたずっと気になってた。ま、これも、知らなきゃ知らないで別に困りはしないんだろうけどね。

○確認/「値を変数に格納する」ってどういうこと?
例),$x=123;
123という値をxという名前の箱に入れる

●本題/定義された変数名は、どう扱われているのか。
結論としては、変数自身($x)もどこかに格納しているらしいです。
厳密に言うと、「変数名と関連する定義が値とは別に格納されている」ということだそうです。

格納場所は、名前空間(namespace)。
このnamespaceには、以下の2種類あるそうな。

(1)シンボルテーブル(symbol table)
グローバル変数を表すシンボルテーブルエントリを格納するグローバルハッシュ。

(2)レキシカルスコープ(lexical scope)
シンボルテーブルには属さず、
プログラム内のコードのブロックに所属する、名前のないスクラッチパッド、だそう。
ようは、こちらには、そのブロックだけから見る(scopeの所以)ことのできる変数が入るらしい。
つまり、「my」で宣言された変数が入る、ということみたい。

このシンボルテーブルとレキシカルスコープは、いくつ存在してもよいとのこと。なぜなら、定義したすべての変数名と関連する定義は、いくつか存在するうちの一つに勝手に格納されるから、だそうです。

ちなみに、lexicalは「テキストに関連する」という所以だそう。