#!/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__ #### 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