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/                 ##
##                                                            ##
################################################################

Reply via email to