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+)')
よりも先に定義しないといけない。