CGI::Application::DispatchでURL操作
Perl, dev No Comments »CGI::Application::Dispatchで下記のようなURLを実装する方法。
http://yourdomain.com/app.cgi/[param1]/[param2]
(mod_rewriteは使わない)
app.cgi
#!/usr/bin/perl
use strict;
use warnings;
use lib qw (./lib);
use CGI::Carp qw (fatalsToBrowser);
use CGI::Application::Dispatch;
CGI::Application::Dispatch->dispatch(
prefix => 'WebApp',
table => [
'' => { app => 'Index', rm => 'index' },
':param1/:parm2' => { app => 'Index', rm => 'hoge' },
]
);
lib/WebApp/Index.pm (¥マークほんとは半角)
package WebApp::Index;
use strict;
use warnings;
use lib qw (./lib);
use base qw (WebApp);
sub setup {
my $self = shift;
$self->start_mode('index');
$self->run_mode(
index => 'do_index',
hoge => 'do_hoge',
);
}
sub do_index {
return "TopPage";
}
sub do_hoge {
my $self = shift;
my $p1 = $self->param('param1');
my $p2 = $self->param('param2');
return "¥$p1 is $p1. And ¥$p2 is $p2.";
}
1;
lib/WebApp.pm
package WebApp;
use strict;
use warnings;
use lib qw (./lib);
use base qw (CGI::Application);
sub cgiapp_prerun {
my $self = shift;
$self->header_props( -charset => 'utf-8' );
}
1;
こんな感じで動いた。無駄な記述もあるのかもしれんけど、とりあえず動いた。
http://yourdomain.com/app.cgi
で「TopPage」が表示されて
http://yourdomain.com/app.cgi/fuga/dodo
だと「$p1 is fuga. And $p2 is dodo.」が表示される。
