dispatherについてのメモ

某所のほげほげで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