Hi, I know the process ended some time ago, but I got an email from Peter Schattner who was using the sample code that Piers and I wrote for the RFC and had a suggested improvement. Piers rewrote the sample implementation and I tweaked it a tiny bit and so I thought I ought to submit it... The code below is runnable and contains the sample implementation for UNIVERSAL::methods Mark. ---------snip and save as test.pl------------- #!/usr/bin/perl -w use strict; package BaseClass; sub baseclass {} package DerivedClass1; use base 'BaseClass'; sub derived {} sub one {} package DerivedClass2; use base 'BaseClass'; sub derived {} sub two {} package BabyClass; use base qw(DerivedClass1 DerivedClass2); sub three {} package main; print "BaseClass: ", join(", ", sort BaseClass->methods()), "\n"; print "BaseClass (all): ", join(", ", sort BaseClass->methods('all')), "\n"; print "DerivedClass1: ", join(", ", sort DerivedClass1->methods()), "\n"; print "DerivedClass1 (all): ", join(", ", sort DerivedClass1->methods('all')), "\n"; print "DerivedClass2: ", join(", ", sort DerivedClass2->methods()), "\n"; print "DerivedClass2 (all): ", join(", ", sort DerivedClass2->methods('all')), "\n"; print "BabyClass: ", join(", ", sort BabyClass->methods()), "\n"; print "BabyClass (all): ", join(", ", sort BabyClass->methods('all')), "\n"; print "BabyClass (most) full:\n"; my $methods = BabyClass->methods('all'); foreach my $method ( sort { $methods->{$a} cmp $methods->{$b} } keys %{$methods} ) { my $class = $methods->{$method}; print "\t$class\::$method\n" if index( $class, 'UNIVERSAL' ) == -1; } package UNIVERSAL; use strict; sub methods { my ( $class, $types, $seen, $methods, $recursing ) = @_; $class = ref $class || $class; $types ||= ''; $seen ||= {}; $methods ||= {}; $recursing ||= 0; return if $seen->{$class}++; no strict 'refs'; for my $method ( grep { not /^[(_]/ and defined &{${"$class\::"}{$_}}} keys %{"$class\::"} ) { $methods->{$method} ||= $class; } if ( $types eq 'all' ) { my @parents = @{"$class\::ISA"}; push @parents, 'UNIVERSAL' unless $recursing; foreach my $parent ( @parents ) { $parent->methods( $types, $seen, $methods, 1 ); } } return wantarray ? keys %$methods : $methods; } 1;