X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FDispatchType%2FChained.pm;h=d55d22db8048e4568303238c04b83efc65416a26;hp=c22604bfbf35e56f27caccb3a6d120785f33bf4e;hb=908e3d9e7a61974b3807b7ab37862550452b2456;hpb=8b13f357b71297872a61f142ae62c2e60fda304d diff --git a/lib/Catalyst/DispatchType/Chained.pm b/lib/Catalyst/DispatchType/Chained.pm index c22604b..d55d22d 100644 --- a/lib/Catalyst/DispatchType/Chained.pm +++ b/lib/Catalyst/DispatchType/Chained.pm @@ -141,6 +141,10 @@ sub recurse_match { my @try_actions = @{$children->{$try_part}}; TRY_ACTION: foreach my $action (@try_actions) { if (my $capture_attr = $action->attributes->{CaptureArgs}) { + + # Short-circuit if not enough remaining parts + next TRY_ACTION unless @parts >= $capture_attr->[0]; + my @captures; my @parts = @parts; # localise @@ -192,7 +196,11 @@ sub register { if ($parent eq '.') { $parent = '/'.$action->namespace; } elsif ($parent !~ m/^\//) { - $parent = '/'.join('/', $action->namespace, $parent); + if ($action->namespace) { + $parent = '/'.join('/', $action->namespace, $parent); + } else { + $parent = '/'.$parent; # special case namespace '' (root) + } } } else { $parent = '/'