このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
シンボルテーブルの中身をダンプしてみると、
そこにはメソッドや変数名が登録されていた。
しかし、全てのシンボルに * 文字が含まれている。
* がついているということは、型グロブであると言うことだ。
'salary' => *Employee::salary
Perl の識別子は、データ型ごとに名前空間を持つ。
なので、$value、@value、%value、&value、value は、
それぞれ異なる識別子として共存することができる。
通常は、先頭につく記号などでそれらを区別する。
上記のような変数がパッケージにある場合、
それはシンボルテーブルに登録されているが、
シンボルテーブルは型ではなく名前ごとにキーがあるので、
上記全ての変数は、「value」というキーに登録される。
シンボルテーブルは、上記の変数を区別するために、
キーに対応する値として型グロブを格納している。
型グロブは、シンボルテーブル内部で使用される型であり、
同じ名前を持つ別の型を保持している、特別な型である。
では、シンボルテーブルを経由して、
Employee パッケージの $Version 変数を参照してみよう。
# シンボルテーブル %Employee:: のリファレンスを得る。
my $symbols = \%Employee::;
# Version の型グロブを得る。
my $glob = $symbols->{'Version'};
# $glob をスカラとしてデリファレンスすると、
# $Employee::Version にアクセスしたことになる。
print $$glob;
# これは @Employee::Version 配列を指す。
print @$glob;
型グロブに対してデリファレンスすると、
デリファレンスした時の型の変数にアクセスできるのだ。
これは通常のリファレンスにはない特別な働きである。