某所のほげほげでCGI的何かを作るお仕事をやろうと思って、HTTP::Engineを久しぶりに見てみたり。dispathはやってくれないようなので、その辺について調べる。ディスパッチャの比較 - モダンなPerl入門で紹介されていたPath::Dispatcherが使いやすそうなので使ってみる。書いてあるものほとんどそのままだけど、こんな感じ。
#!/opt/local/bin/perl use strict; use warnings; use Perl6::Say; use Path::Dispatcher; my $dispatcher = Path::Dispatcher->new; $dispatcher->add_rule( Path::Dispatcher::Rule::Regex->new( regex => qr{^/(foo)/}, block => sub { warn $1; }, # foo ) ); $dispatcher->add_rule( Path::Dispatcher::Rule::Tokens->new( tokens => ['term', 'id', qr/^\d+$/], delimiter => '/', block => sub { say $1; say $2; say $3; }, ) ); { my $dispatch = $dispatcher->dispatch("/foo/bar"); die "404" unless $dispatch->has_matches; $dispatch->run; } { my $dispatch = $dispatcher->dispatch("/term/id/90"); die "404" unless $dispatch->has_matches; $dispatch->run; }
出力結果。
/Users/syou6162/perl% perl dispatch.pl foo at dispatch.pl line 12. term id 90