package Interface; use Old; use New; use Carp; sub new { my ($class,@arg) = @_; my $self = {}; return bless $self,$class; } my %new = map {$_ => 1} qw(index page3 page2); sub AUTOLOAD { my $self = shift; my $name = $AUTOLOAD; $name =~ s/.*://; # strip fully-qualified portion #TODO: method name validation! return $new{$name} ? eval "New->new->$name" : eval "Old->new->$name" ; } sub DESTROY {} # good practice - prevents unecessary call to AUTOLOAD 1;