Catalyst の LocalRegex は定義順を見る

色々試して原因を特定するのに 2 時間以上ハマってしまいました。

package MyApp::Controller::Foo;
sub bar : LocalRegex('(\w+)')
sub baz : LocalRegex('^baz')

だと、/foo/baz は bar() にマッチ

package MyApp::Controller::Foo;
sub baz : LocalRegex('^baz')
sub bar : LocalRegex('(\w+)')

だと、/foo/baz は baz() にマッチ

だから、ユーザー情報を扱うコントローラーとかで、login(), register() など、予約された URL 以外はユーザー情報を表示とかしたいときに、

sub register : Local

Regex(), LocalRegex() より優先されるから、どこで定義しても良いが、

sub foo : LocalRegex('^foo/(\w+)')

は、

sub show : LocalRegex('^(\w+)')

よりも先に定義しないといけない。