in reply to Finding classes which are inherited from a given class
I wrote the following recently for a similar purpose:
sub walk_oo_tree { my $obj = shift; my $class = ref $obj ? ref $obj : $obj; my @class_list = (); unless ($skip_class_map{$class}) { NO_STRICT_REFS_ZONE: { no strict 'refs'; @class_list = ($class, map { @{walk_oo_tree($_)} } @{join( +'::', $class, 'ISA')}); use strict 'refs'; } } return \@class_list; }
The %skip_class_map (in my implementation) was global (our) and evaluated to (UNIVERSAL => 1, AUTOLOAD => 1).
Note: you can pass this a class name or an object of the required class.
Finally, to head off comments re the 'NO_STRICT_REFS_ZONE:' block: the label, block and use are not necessary. I prefer defensive programming to surprises.
Regards,
PN5
|
---|