找出Perl类的所有超类的最佳实践是什么?

是否有标准的CPAN方法来查找Perl类的所有超类(或更好的整个超类树,直到UNIVERSAL)?

或者是为每个班级,班级的父母等简单地检查@ {“${$class} :: ISA”}的最佳做法?

解决方法

没有“标准方式”,因为这不是您想要做的标准事情.除了可视化之外,想要检查继承树的是OO红旗.

除了Class :: ISA之外,还有mro::get_linear_isa().两者都已经在核心中存在了一段时间,所以它们可以被认为是某些定义的“标准”.这两个都显示继承作为一个平面列表,而不是一个树,这对于深层魔法很有用.

perl5i meta object提供linear_isa(),就像mro(它只是调用mro)和ISA()返回类’@ISA.它可以用于使用简单递归构造树而无需进入符号表.

use perl5i::2;

func print_isa_tree($class,$depth) {
    $depth ||= 0;

    my $indent = "    " x $depth;
    say $indent,$class;

    for my $super_class ($class->mc->ISA) {
        print_isa_tree($super_class,$depth+1);
    }

    return;
}


my $Class = shift;
$Class->require;

print_isa_tree($Class);

__END__
DBIx::Class
    DBIx::Class::Componentised
        Class::C3::Componentised
    DBIx::Class::AccessorGroup
        Class::Accessor::Grouped

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...