Catalyst初心者二人組(片方はPerlすら初心者)が謎のエラーに遭遇して、無事に生還したぞの巻だ。
最近mysqlを使ったウェブアプリケーションを構築していて、僕はその面倒を見ているわけだ。普通のCRUDな感じのアプリなんで、いつも通りに書けばたいして難しい話ではないが、(僕が)どうしてもフレームワークを使ってみたかったので、O/Rマッピング最高だろ!な!わかるだろ、SQLなんて書かなくていいんだぞ!なんつって、手動かしてもらってる。
で、はまった箇所はGETでパラメータを渡してmysqlにinsertするとこで、Catalyst::Model::CDBI::DB->create するとこんなエラーを吐いて終了したぞ(何故?)。
Caught exception in Test->add "Can't use string ("5") as a subroutine ref while "strict refs"
最初原因がわからなくて小一時間悩んだが、
- $req->paramはパラメータ
- $c->req->param('kzfm')
- $req->paramsはパラメータのリファレンス
- $c->req->params->{kzfm}
ので、$c->req->param->('kzfm')と書いてた部分がエラーの原因だった。
Q.じゃぁ5って何よ? A.パラメータにわたった変数の数です
Catalystはなかなか新鮮だ。