When creating an AUTOLOAD run mode, I wanted to name the method AUTOLOAD, so I set up my application module as:
sub setup { my ($self) = @_; $self->run_modes([qw/mode1 mode2 AUTOLOAD/]); $self->start_mode("mode1"); } sub mode1 { return "running mode1\n"; } sub mode2 { return "running mode2\n"; } sub AUTOLOAD { my ($self, $requested_mode) = @_; print STDERR "running AUTOLOAD\n"; return "invalid mode $requested_mode\n"; } However, it seems that in this case the AUTOLOAD method always runs after the appropriate run mode, and its second argument is undefined. For example: % ./app.pl rm=mode2 Content-Type: text/html; charset=ISO-8859-1 running mode2 running AUTOLOAD Use of uninitialized value in concatenation (.) or string at ../lib/Credentials/App.pm line 18. % ./app.pl rm=foo running AUTOLOAD Content-Type: text/html; charset=ISO-8859-1 invalid mode foo running AUTOLOAD Use of uninitialized value in concatenation (.) or string at ../lib/Credentials/App.pm line 18. If I name the AUTOLOAD method something else, things work as I expect: $self->run_modes( "mode1" => "mode1", "mode2" => "mode2", "AUTOLOAD" => "catchall" ); sub catchall { ... } % ./app.pl rm=mode2 Content-Type: text/html; charset=ISO-8859-1 running mode2 % ./app.pl rm=foo running AUTOLOAD Content-Type: text/html; charset=ISO-8859-1 invalid mode foo Is this expected behavior, or is it a bug? Am I forced to name the AUTOLOAD method something other than AUTOLOAD? Is there some sort of interaction with Perl's own AUTOLOAD method? Thanks. Joey ##### CGI::Application community mailing list ################ ## ## ## To unsubscribe, or change your message delivery options, ## ## visit: http://www.erlbaum.net/mailman/listinfo/cgiapp ## ## ## ## Web archive: http://www.erlbaum.net/pipermail/cgiapp/ ## ## Wiki: http://cgiapp.erlbaum.net/ ## ## ## ################################################################