The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 6;

use Routes::Tiny;

my $r = Routes::Tiny->new;

$r->add_route(
    '/admin/:service(/:action)?',
    name     => 'route',
    defaults => {action => 'list'}
);

my $m = $r->match('/admin/foo');
is_deeply($m->params, {service => 'foo', action => 'list'});
is($r->build_path('route', service => 'foo'), '/admin/foo');

$m = $r->match('/admin/foo/bar');
is_deeply($m->params, {service => 'foo', action => 'bar'});
is($r->build_path('route', service => 'foo', action => 'bar'),
    '/admin/foo/bar');

$m = $r->match('/admin/bar');
is_deeply($m->params, {service => 'bar', action => 'list'});
is($r->build_path('route', service => 'bar'), '/admin/bar');