gpt4 book ai didi

perl - 发现 Perl 模块所有子例程的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 10:53:52 26 4
gpt4 key购买 nike

以编程方式发现 perl 模块具有的所有子例程的最佳方法是什么?这可以是一个模块、一个类(没有@EXPORT)或任何介于两者之间的东西。

编辑:下面的所有方法看起来都可以工作。我可能会在生产中使用 Class::Sniff 或 Class::Inspector。然而,Leon 的回答被标记为“接受”,因为它回答了所提出的问题,即使 no strict 'refs'必须使用。 :-) Class::Sniff 可能是一个不错的选择。看起来已经有很多想法了。

最佳答案

sub list_module {
my $module = shift;
no strict 'refs';
return grep { defined &{"$module\::$_"} } keys %{"$module\::"}
}

ETA:如果你想过滤掉导入的子程序,你可以这样做
use B qw/svref_2object/;

sub in_package {
my ($coderef, $package) = @_;
my $cv = svref_2object($coderef);
return if not $cv->isa('B::CV') or $cv->GV->isa('B::SPECIAL');
return $cv->GV->STASH->NAME eq $package;
}

sub list_module {
my $module = shift;
no strict 'refs';
return grep { defined &{"$module\::$_"} and in_package(\&{*$_}, $module) } keys %{"$module\::"}
}

关于perl - 发现 Perl 模块所有子例程的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/607282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com