oinume journal

Scratchpad of what I learned

Perlでパッケージに定義されているメソッドを出力する

Perlであるパッケージに定義されているメソッドを調べたい場合は、シンボルテーブル(%パッケージ名::)をダンプしてやればオッケーなようです。例えばClass::Accessorのシンボルテーブルをダンプするには下記のように書けばOK。

$ perl -MClass::Accessor -MData::Dumper -e 'print Dumper(%Class::Accessor::)'

$VAR1 = {

'__ANON__' => *Class::Accessor::__ANON__,

'mk_wo_accessors' => *Class::Accessor::mk_wo_accessors,

'mk_accessors' => *Class::Accessor::mk_accessors,

'make_ro_accessor' => *Class::Accessor::make_ro_accessor,

'mk_ro_accessors' => *Class::Accessor::mk_ro_accessors,

'BEGIN' => *Class::Accessor::BEGIN,

'_mk_accessors' => *Class::Accessor::_mk_accessors,

'get' => *Class::Accessor::get,

'new' => *Class::Accessor::new,

'set' => *Class::Accessor::set,

'_carp' => *Class::Accessor::_carp,

'make_wo_accessor' => *Class::Accessor::make_wo_accessor,

'import' => *Class::Accessor::import,

'make_accessor' => *Class::Accessor::make_accessor,

'VERSION' => *Class::Accessor::VERSION,

'_croak' => *Class::Accessor::_croak

};

Devel::Symdumpを使うとサブルーチンだったりスカラー変数などを区別することが可能です。まじめにシンボルテーブルを参照するようなプログラムであればこれを使った方が楽かもしれません。

 

$ perl -MDevel::Symdump -MClass::Accessor -MData::Dumper -e 'print Dumper([ Devel::Symdump->new("Class::Accessor")->functions ])'

 

 

$VAR1 = [

'Class::Accessor::mk_accessors',

'Class::Accessor::mk_wo_accessors',

'Class::Accessor::accessor_name_for',

'Class::Accessor::make_ro_accessor',

'Class::Accessor::mk_ro_accessors',

'Class::Accessor::get',

'Class::Accessor::_mk_accessors',

'Class::Accessor::best_practice_accessor_name_for',

'Class::Accessor::new',

'Class::Accessor::set',

'Class::Accessor::best_practice_mutator_name_for',

'Class::Accessor::_carp',

'Class::Accessor::mutator_name_for',

'Class::Accessor::make_wo_accessor',

'Class::Accessor::follow_best_practice',

'Class::Accessor::make_accessor',

'Class::Accessor::_croak'

];