Path::Router
$router->add_route('blog/:year/:month/:day' => ( defaults => { controller => 'blog', action => 'show_date', }, # validate with ... validations => { # ... raw-Regexp refs year => qr/\d{4}/, # ... custom Moose types you created month => 'NumericMonth', # ... Moose anon-subtypes created inline day => subtype('Int' => where { $_ <= 31 }),