获取 Perl 中从给定基类派生的类列表

Dev*_*lar 4 oop perl

给定一个基类和从它派生的类列表:

package base
{
    # ...
}

package foo
{
    our @ISA = 'base';
    # ...
}

package bar
{
    our @ISA = 'base';
    # ...
}
Run Code Online (Sandbox Code Playgroud)

是否有运行时方法来获取作为父级的类的列表base

我知道我可以通过手动将他们的名字添加到列表中来轻松解决这个问题,但我想知道base它本身是否可以告诉我谁继承了它。

tob*_*ink 6

从 Perl 5.10 开始,Perl 附带了一个名为 的模块mro,其中包含一大堆用于检查类层次结构的函数。

您可以找到My::Class使用以下内容的子类:

use mro;

my $base_class = 'My::Class';
print "$_\n" for @{ mro::get_isarev( $base_class ) };
Run Code Online (Sandbox Code Playgroud)

mro文档包含各种警告,例如在'UNIVERSAL'包上调用它无法正常工作。在其他情况下它会处理不好,但如果你“做正常的事情”,它应该可以工作。