[cgiapp] can AUTOLOAD sub be named AUTOLOAD?
rjmorris12 at gmail.com
rjmorris12 at gmail.com
Tue Apr 15 23:09:18 EDT 2008
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
More information about the cgiapp
mailing list