Class::Inspectorというモジュールを見かけました。
どうやら指定したモジュールのメソッド一覧を取得できるようです。
http://search.cpan.org/perldoc?Class::Inspector
http://d.hatena.ne.jp/tociyuki/20060821/1156425237
ただ、Class::InspectorのSYNOPSIS に気になる2個のメソッドがありました。
Class::Inspector->functions( 'Foo::Class' ); Class::Inspector->methods( 'Foo::Class', 'full', 'public' );
関数とメソッドの違いとは何だろう。
そこでテストスクリプトを作って、Data::Dumperに対して実験してみました。
#!perl use Class::Inspector; use Data::Dumper; use Algorithm::Diff qw/diff/; my $TARGET_CLASS = "Data::Dumper"; my $functions = Class::Inspector->functions($TARGET_CLASS); my $methods = Class::Inspector->methods($TARGET_CLASS); my @diffs = diff($functions, $methods ); for my $diff1 ( @diffs ){ for my $diff2 ( @$diff1 ){ print "$diff2->[0] $diff2->[1] $diff2->[2]\n"; } }
bash-3.2$ ./foo.pl + 30 as_heavy + 35 export + 36 export_fail + 37 export_ok_tags + 38 export_tags + 39 export_to_level + 41 import + 45 require_version
どうやら、methods() では、Data::Dumperの親クラスであるExporterの内容も取得できるようです。
なので、次のように理解しておけばいいのかな?
関数 ( function )
関数は、そのクラスに実装されているもののみが対象。
Class::function() で呼べる。
メソッド ( method )
関数は、そのクラスに実装されているものと親クラスが対象。
$obj->method() で呼べる。