Devel::Symdumpをさわってみました。シンボルテーブルをいろいろな方法でダンプしてくれるモジュールです。
#!/usr/bin/perl
package MyDB;
use strict;
use warnings;
use base qw/Class::DBI/;
use Class::DBI::Loader;
my $loader = Class::DBI::Loader->new(
dsn => "dbi:mysql:test",
user => "test",
password => "",
options => { RaiseError => 1 },
namespace => "Data",
left_base_classes => qw/Class::DBI::Sweet/,
);
require Devel::Symdump;
my $obj = Devel::Symdump->rnew($loader);
print $obj->inh_tree();
inh_tree()は継承関係をツリー構造にしてくれます。一部抜粋。
Ima::DBI
Class::DBI::__::Base
Class::DBI
Class::DBI::Sweet
Data::Item
Class::DBI::mysql
Data::Item
MyDB
Class::DBI::SUPER
なるへそ。
もう一個、IS-A関係をツリーで表示してくれるisa_tree()というメソッドもためす。
MyDB
Class::DBI
Class::DBI::__::Base
Class::Data::Inheritable
Class::Accessor
Ima::DBI
Class::Data::Inheritable
メソッド探索の順番は上からの大基本。Apache::Statusもこのモジュール使って、ISA Tree/Inheritance Treeを表示してるわけでした。