1use strict;
2use warnings;
3use Router::Simple::Declare;
4
5my $path = shift @ARGV || '/account/login';
6
7my $rs = router {
8    # path and params
9    connect '/' => { controller => 'Root', action => 'index' };
10
11    # path, conditions, and params
12    connect '/home', { controller => 'Home', action => 'show' }, { method => 'GET' };
13    connect '/date/{year:\d{4}}',
14        { controller => 'Date', action => 'by_year' };
15
16    # path, params, and nesting
17    submapper('/account', { controller => 'Account' })
18        ->connect('/login',  {action => 'login'})
19        ->connect('/logout', {action => 'logout'});
20
21    # path nesting
22    submapper('/account')
23        ->connect('/signup',  {controller => 'User', action => 'register'})
24        ->connect('/logout', {controller => 'Account', action => 'logout'});
25
26    # conditions nesting
27    submapper('/', {}, { method => 'GET' })
28        ->connect('/search' => {controller => 'Items', action => 'search'})
29        ->connect('/tags'   => {controller => 'Tags',  action => 'index'});
30
31    # params nesting
32    submapper('/', { 'controller' => 'Account' })
33        ->connect('/login', {action => 'login'})
34        ->connect('/logout', {action => 'logout'})
35        ->connect('/signup', {action => 'signup'});
36
37    # match only
38    connect '/{controller}/{action}/{id}.{format}';
39    connect '/{controller}/{action}/{id}';
40};
41
42for my $i (0..10000) {
43    $rs->match($path);
44}
45
46