Perl の特定のオブジェクトまたはパッケージで使用可能なメソッドを一覧表示するにはどうすればよいですか?
5 に答える
Perl には非常に多くの方法があるため、Perl でこれを行う方法は (むしろ) 多くあります。誰かがコメントしたように、自動ロードされたメソッドは常に少し注意が必要です。ただし、独自のアプローチを展開するのではなく、CPANのClass::Inspectorを参照することをお勧めします。これにより、次のようなことができます。
my $methods = Class::Inspector->methods( 'Foo::Class', 'full', 'public' );
というパッケージがある場合は、次のようにしますFoo
。
no strict 'refs';
for(keys %Foo::) { # All the symbols in Foo's symbol table
print "$_\n" if exists &{"Foo::$_"}; # check if symbol is method
}
use strict 'refs';
または、 package 内のすべてのメソッドのリストを取得するにはFoo
:
no strict 'refs';
my @methods = grep { defined &{"Foo::$_"} } keys %Foo::;
use strict 'refs';
Mooseを使用しているパッケージがある場合は、かなり単純です。
print PackageNameHere->meta->dump;
より完全なデータについては、次のとおりです。
use Data::Dumper;
print Dumper( PackageNameHere->meta );
始めましょう。他のすべてについては、 Class::MOP::Class->meta
で文書化されている上に表示されるメソッドがあります。
それなしで、パッケージのムースの良さのアドホックな偽造を少し行うことができます:
use Class::MOP::Class;
my $meta = Class::MOP::Class->initialize( PackageNameHere );
次に、Moose の場合と同様に Class::MOP メソッドを使用します。
手始めに:
$meta->get_method_map();
ムースを使用します。#、その素晴らしい。
一般に、Perl のような動的言語ではこれを行うことはできません。パッケージは、見つけることができるいくつかのメソッドを定義する場合がありますが、使用するまで定義を持たないメソッドをオンザフライで作成することもできます。さらに、(機能する) メソッドを呼び出しても、それが定義されない場合があります。動的言語を優れたものにするのは、このようなことです。:)
解決しようとしているタスクは何ですか?