Here's a little routine I whipped up that should handle the @ISA path for a class. Mind, it still won't tell you about tricky additions to the method space such as auto-loaded methods that aren't pre-declared with "use vars", for example. In other words, you can fool it pretty easily but if you're using the code in a fairly plain environment, it should at least be helpful.
sub find_methods
{
my $pack = shift;
my $tbl = shift || {};
no strict 'refs';
my ($key, $val);
while (($key, $val) = each %{"${pack}::"})
{
$tbl->{$key}++ if defined *{$val}{CODE};
}
if (@{"${pack}::ISA"})
{
find_methods($_, $tbl) for (@{"${pack}::ISA"});
}
sort keys %$tbl;
}
It assumes that the code behind the specified class has already been loaded. You call it as:
@methods = find_methods $classname;
You won't get duplicate names in the cases where a sub-class overrides a method previously defined in a parent. Recursion is your friend.
--rjray |