package A; sub b { } 1; package Ab; sub c { } 1; package main; use strict; use warnings; use Test::More; use Kelp::Routes; my $r = Kelp::Routes->new; $r->add('/a' => {to => 'a#b', name => 'a'}); $r->add('/b' => {to => 'ab#c', name => 'b'}); $r->add('/a/b' => {to => 'a#b', name => 'ab'}); $r->add('/a/b/c' => 'ab#c'); is $r->url('noname'), 'noname'; is $r->url('a'), '/a'; is $r->url('b'), '/b'; is $r->url('ab'), '/a/b'; $r->clear; $r->add('/:a/:b', {to => 'a#b', name => 'a'}); $r->add('/:a/?b', {to => 'ab#c', name => 'b', defaults => {b => 'foo'}}); is $r->url(qw/a a bar b foo/), '/bar/foo'; is $r->url(qw/b a bar b moo/), '/bar/moo'; is $r->url(qw/b a bar/), '/bar/foo'; done_testing;