44

Perl の特定のオブジェクトまたはパッケージで使用可能なメソッドを一覧表示するにはどうすればよいですか?

4

5 に答える 5

40

Perl には非常に多くの方法があるため、Perl でこれを行う方法は (むしろ) 多くあります。誰かがコメントしたように、自動ロードされたメソッドは常に少し注意が必要です。ただし、独自のアプローチを展開するのではなく、CPANのClass::Inspectorを参照することをお勧めします。これにより、次のようなことができます。

my $methods =   Class::Inspector->methods( 'Foo::Class', 'full', 'public' );
于 2009-05-26T13:08:54.920 に答える
23

というパッケージがある場合は、次のようにします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';
于 2009-05-26T12:42:41.557 に答える
13

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(); 

ムースを使用します。#、その素晴らしい

于 2009-05-26T14:51:11.280 に答える
3

一般に、Perl のような動的言語ではこれを行うことはできません。パッケージは、見つけることができるいくつかのメソッドを定義する場合がありますが、使用するまで定義を持たないメソッドをオンザフライで作成することもできます。さらに、(機能する) メソッドを呼び出しても、それが定義されない場合があります。動的言語を優れたものにするのは、このようなことです。:)

解決しようとしているタスクは何ですか?

于 2009-05-26T15:24:44.117 に答える