如何在Perl中列出给定对象或包的可用方法?

如何在Perl中列出给定对象或包的可用方法?

如果你有一个名为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'; 

或者,要获得所有方法的列表:

 no strict 'refs'; my @methods = grep { defined &{$_} } keys %Foo::; use strict 'refs'; 

在Perl中有很多方法可以做到这一点,因为在Perl中有很多方法可以做。 正如有人评论,自动加载方法总是有点棘手。 但是,不要自己动手,我build议你看看CPAN上的Class :: Inspector 。 这会让你做这样的事情:

 my @methods = Class::Inspector->methods( 'Foo::Class', 'full', 'public' ); 

如果你有一个使用Moose的软件包,其合理简单:

 print PackageNameHere->meta->dump; 

而对于更完整的数据:

 use Data::Dumper; print Dumper( PackageNameHere->meta ); 

会让你开始。 对于其他一切,theres出现在->metalogging在Class :: MOP :: Class中的方法

你可以做一些AdHoc伪装的驼鹿善良的包没有它与:

 use Class::MOP::Class; my $meta = Class::MOP::Class->initialize( PackageNameHere ); 

然后继续像使用Moose一样使用Class :: MOP方法。

对于初学者:

  $meta->get_method_map(); 

使用驼鹿; #, 真棒

一般来说,你不能用像Perl这样的dynamic语言来做到这一点。 这个软件包可能会定义一些你可以find的方法,但是它也可以在你使用它们的时候直接定义没有定义的方法。 另外,即使调用一个方法(可行)也不能定义它。 这就是使dynamic语言更好的东西。 🙂

你想要解决什么任务?