キャメルケースは対応出来ない?
Mojolicious のルーティングで、 to()
の第一引数に文字列として コントローラパッケージ名#メソッド名
という指定が可能なのですが、公式では、
$r->get('/')->to('sample#method');
のようなすべて小文字の書き方のサンプルが掲示されており、 Sample.pm
の method()
関数を呼び出していますが、例えば Web::SampleProgram
のようなキャメルケース(単語ごとの頭文字を大文字にする)のパッケージ名の場合、困っちゃいます。
$r->get('/')->to('web-sampleprogram#method'); # Web::Sampleprogram になっちゃう(pが小文字のまま)
できなくない!
もちろんできます。
$r->get('/')->to('web-sample_program#method'); # Web::SampleProgram になる!
という書き方ができます。つまりこの Mojolicious ルータの to()
に文字列だけが渡された場合の変換は、
- コントローラ部分の英字は先頭を大文字にする。
- ハイフン
-
は::
に置き換わる。 - アンダーバー
_
は次にくる文字を大文字にする。
というルールになります。
まぁ、この場合、
$r->get('/')->to(controller=>'Web::SampleProgram', action=>'method');
上記のようにコントローラーとアクションをそれぞれ別個で指定することも可能なんですけどね。
お好みでどうぞ。