如何在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出现在->meta
logging在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语言更好的东西。 🙂
你想要解决什么任务?