Nic*_*son 38
在Perl中有很多方法可以做到这一点,因为在Perl中有很多方法可以做.有人评论说,自动加载的方法总是有点棘手.但是,我建议你看一下CPAN 上的Class :: Inspector,而不是滚动你自己的方法.这会让你做一些事情:
my $methods = Class::Inspector->methods( 'Foo::Class', 'full', 'public' );
Run Code Online (Sandbox Code Playgroud)
Chr*_*utz 21
如果您有一个名为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';
Run Code Online (Sandbox Code Playgroud)
或者,要获取所有方法的列表:
no strict 'refs';
my @methods = grep { defined &{"Foo::$_"} } keys %Foo::;
use strict 'refs';
Run Code Online (Sandbox Code Playgroud)
Ken*_*ric 12
如果你有一个使用Moose的包,它相当简单:
print PackageNameHere->meta->dump;
Run Code Online (Sandbox Code Playgroud)
并获得更完整的数据:
use Data::Dumper;
print Dumper( PackageNameHere->meta );
Run Code Online (Sandbox Code Playgroud)
会让你开始.对于其他所有内容,出现在->meta其上的方法记录在Class :: MOP :: Class中
你可以做一些AdHoc假装的驼鹿善良包装没有它:
use Class::MOP::Class;
my $meta = Class::MOP::Class->initialize( PackageNameHere );
Run Code Online (Sandbox Code Playgroud)
然后像使用Moose一样继续使用Class :: MOP方法.
对于初学者:
$meta->get_method_map();
Run Code Online (Sandbox Code Playgroud)
用驼鹿; #,它真棒.