ziguzagu.org

Devel::Symdump

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を表示してるわけでした。