# I didn't test this, and didn't throw it away for some reason... package a_delegate; BEGIN { # If you don't like AUTOLOAD you could also use Corions solution, but use a blacklist # instead of a whitelist, to ensure that you capture new superclass methods if any arise. my %IGNORE = map { $_=>undef } qw( new and other funcs to ignore delegation ); for my $method (keys %Furl::) { next if exists $IGNORE{$method}; die "a_delegate already provides an implementation of $method!\n" if exists $a_delegate::{$method}; *$method = sub { my $self=shift; $self->{delegate}->$method(@_); }; } # Your normally scheduled package stuff... }