There is no standard way because this is not the standard thing you want to do. For anything but visualization, this is the red OO flag that wants to test your inheritance tree.
In addition to Class :: ISA, there is mro :: get_linear_isa () . Both were in the kernel for a while, so they could be considered "standard" for some definition. Both of them show inheritance as a flat list, not a tree, which is mainly useful for deep magic.
The perl5i meta object provides both linear_isa () , like mro (it just calls mro), and ISA () , which returns the class' @ISA . It can be used to build a tree using simple recursion without going to symbol tables.
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
Schwern
source share