The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.010000;
use autodie;
use Benchmark qw(:all);
use Router::Boom;
use Router::Boom::Method;
use Router::Simple;

my $router_boom = do {
    my $router = Router::Boom->new();
    $router->add('/',      'Root');
    $router->add('/entrylist', 'EntryList');
    $router->add("/$_", "$_") for 'a'..'z';
    $router->add('/:user', 'User#index');
    $router->add('/:user/:year/', 'UserBlog#year_archive');
    $router->add('/:user/:year/:month/', 'UserBlog#month_archive');
    $router;
};

my $router_boom_method = do {
    my $router = Router::Boom::Method->new();
    $router->add(undef, '/',      'Root');
    $router->add(undef, '/entrylist', 'EntryList');
    $router->add(undef, "/$_", "$_") for 'a'..'z';
    $router->add(undef, '/:user', 'User#index');
    $router->add(undef, '/:user/:year/', 'UserBlog#year_archive');
    $router->add(undef, '/:user/:year/:month/', 'UserBlog#month_archive');
    $router;
};

my $router_simple = do {
    my $router = Router::Simple->new();
    $router->connect('/',      'Root');
    $router->connect('/entrylist', 'EntryList');
    $router->connect("/$_", "$_") for 'a'..'z';
    $router->connect('/:user', 'User#index');
    $router->connect('/:user/:year/', 'UserBlog#year_archive');
    $router->connect('/:user/:year/:month/', 'UserBlog#month_archive');
    $router;
};

cmpthese(
    -1, {
        'Router::Simple'         => sub { $router_simple->match('/dankogai/2013/02') },
        'Router::Boom'           => sub { $router_boom->match('/dankogai/2013/02') },
        'Router::Boom::Method'   => sub { $router_boom_method->match('GET', '/dankogai/2013/02') },
    }
);