packageでのuse varsの宣言とmy宣言の違いがわからなくなっていろいろ調べていたら、結局型グロブにたどり着いた。
例えば、*main::foo = *main::hoge は、$main::{foo} = $main::{hoge} と同値だそうだ。型グロブは、シンボルテーブルの要素、と考えていいのかな? また、型グロブに値を代入することは、値の代入というよりはシンボルテーブルの編集、つまり変数名に関するエリアス操作と考えた方がよさそうだ。
さらにもう一押ししてuse varsの実装。中味を見ると、呼び出し元パッケージのシンボルテーブルを無理矢理作成しているように見える。へー。
詳しくはperldoc perlmod辺りで。