MTのソースコードを読んでいて、
MT/App/CMS.plというファイルの中によくわからない記述がある。
sub core_methods {
my $app = shift;
my $pkg = '$Core::MT::CMS::';
return {
'tools' => "${pkg}Tools::system_check",
'dashboard' => "${pkg}Dashboard::dashboard",
'menu' => "${pkg}Dashboard::dashboard",
'admin' => "${pkg}Dashboard::dashboard",
....
「$pkg = '$Core::MT::CMS::'」と宣言されているから、
「${pkg}Dashboard::dashboard」というのは「$Core::MT::CMS::Dashboard::dashboard」
のことだと思う。
で、この「$Core」というのが何なのかわからない。
このソース内や継承している継承もとのパッケージのソースを調べたけれど、
この「$Core」が何か教えてくれるものはみつからなかった。
もしやこれはMT由来のものではなくてPerl由来の何かなのか?と思って、
ラクダ本で、COREについて調べると、357ページに次のような記述がある。
ということで、全部大文字の「CORE」は組み込み関数をオーバーライドしたあとで、オーバーライドしていない状態の組み込み関数を呼び出すときに付けるものらしい。
うーん、でも「CORE」と「Core」では違うしなぁ。
「$Core::MT::CMS::Dashboard::dashboard」とやったときに、
名前空間はどうやって処理されているのだろうか?
どうみてもこれは「MT::CMS::Dashboard::dashboard」を呼んでいるが、
「Core」という名前空間が頭に付いているし、
調べた限りではその名前は宣言されていない。
MTのlibフォルダの中には「MT::Core」というファイルもあるが、
MTが頭についてちゃやっぱりだめなわけで・・・。
これを調べるの2回目なのだけど、結局わからず。