... # in some other function $server->print_forms(add => $data); # this is the exact errant method call ... # in the server class, here's the AUTOLOAD method sub AUTOLOAD { my $self = $_[0]; # Don't disturb the @_! It's important! print STDERR "AUTOLOADing new method into server module.\n" if $self->flag('verbose') > 1; my $method = our $AUTOLOAD; $method =~ s/[^:]+:://; print STDERR "Attempting to find method $method for server module.\n" if $self->flag('verbose') > 1; $method = -e "functions/$method.pm" ? "functions/$method.pm" : do { $method =~ /^(.)/; }; # According to the debugger Exporter is being properly # called and printing out the %:: hash tells me that # %main::functions::print_forms does indeed make it # into the mainspace properly, so i know it's not failing if (eval { require $method }) { $method =~ s/^functions\/(.*)\.pm$/$1/; eval "import functions::${method}"; print STDERR "Found $method: goto in effect...\n" if $self->flag('verbose') > 1; goto &$method; # At this point, even though $method is 'print_forms' # and @_ is correct, it goes back up to the top of # the AUTOLOAD method instead of where it's supposed to go. } else { warn "Couldn't find $method method for server:\n$@\n"; } }