Here's something I quickly hacked together. It might
need some work:
#!/usr/bin/perl
use strict;
use warnings;
my $class = shift;
eval "use $class";
die $@ if $@;
# First, find all the classes, and the ones it inherits.
my %classes = ($class => 1);
my @classes = ($class);
while (@classes) {
my $class = pop @classes;
no strict 'refs';
foreach my $class (@{"$class\::ISA"}) {
next if $classes {$class} ++;
push @classes => $class;
}
}
# Then find the subs in those classes.
while (my $class = each %classes) {
no strict 'refs';
print "From class '$class':\n";
while (my $entry = each %{"$class\::"}) {
print "\t$entry\n" if defined &{"$class\::$entry"};
}
}
__END__
Calling this with
IO::File as argument gives:
From class 'IO::Seekable':
sysseek
setpos
croak
confess
getpos
carp
tell
seek
From class 'IO::File':
qualify
new
confess
ungensym
open
qualify_to_ref
gensym
croak
new_tmpfile
carp
From class 'IO::Handle':
qualify
setvbuf
format_write
fcntl
format_lines_per_page
print
sysread
format_top_name
input_record_separator
SEEK_SET
stat
confess
opened
flush
eof
_open_mode_string
syswrite
error
_IONBF
format_formfeed
format_page_number
sync
truncate
constant
croak
SEEK_CUR
gets
carp
fdopen
getc
untaint
read
new
fileno
clearerr
write
format_line_break_characters
blocking
format_name
ungetc
autoflush
setbuf
ioctl
DESTROY
ungensym
_IOFBF
qualify_to_ref
_IOLBF
output_record_separator
gensym
close
getline
output_field_separator
printf
formline
format_lines_left
SEEK_END
printflush
getlines
input_line_number
new_from_fd
From class 'Exporter':
export_fail
export_tags
export_ok_tags
export
import
as_heavy
require_version
export_to_level