--- lib/Dancer/Route.pm 2010-05-19 18:15:55.000000000 +0200 +++ lib/Dancer/Route.pm.splat 2010-05-19 18:19:46.000000000 +0200 @@ -294,7 +294,12 @@ # if named variables were found, return params accordingly if (@$variables) { for (my $i = 0; $i < ~~ @$variables; $i++) { + if($variables->[$i] eq 'splat' && $capture) { + $params{splat} ||= []; + push @{$params{splat}}, $values[$i]; + } else { $params{$variables->[$i]} = $values[$i]; + } } return \%params; } --- lib/Dancer/Route/Builder.pm 2010-05-19 18:15:50.000000000 +0200 +++ lib/Dancer/Route/Builder.pm.splat 2010-05-19 18:15:29.000000000 +0200 @@ -45,20 +45,15 @@ } else { # look for route with params (/hello/:foo) - if ($pattern =~ /:/) { - @params = $pattern =~ /:([^\/\.]+)/g; + if ($pattern =~ /[:*]/) { + @params = $pattern =~ /(:[^\/\.]+|\*)/g; if (@params) { - $pattern =~ s/(:[^\/\.]+)/\(\[\^\/\]\+\)/g; + $pattern =~ s/(:[^\/\.]+|\*)/\(\[\^\/\]\+\)/g; + @params = map { /^:(.*)$/ ? $1 : 'splat' } @params; $capture = 1; } } - # parse wildcards - if ($pattern =~ /\*/) { - $pattern =~ s/\*/\(\[\^\/\]\+\)/g; - $capture = 1; - } - # escape dots $pattern =~ s/\./\\\./g if $pattern =~ /\./; }