package bfs_dispatch; use Carp; sub import { my ($x, @isa) = @_; my $caller = caller; *{"$caller\::AUTOLOAD"} = sub { my $self = shift; $AUTOLOAD =~ s/.*:://; for my $method ($AUTOLOAD, "AUTOLOAD") { my @queue = @isa; while (@queue) { my $class = shift @queue; if ( my $code = *{"$class\::$method"}{CODE} ) { my $call = "$class\::$AUTOLOAD"; return $self->$call(@_); } else { push @queue, @{"$class\::ISA"}; } } } my $class = ref $self || $self; croak qq[Can't locate object method "$AUTOLOAD" via package "$class"]; }; } 1;