@nqounetです。
昨日、久しぶりにmojo generate lite_app
してから簡単なプログラムを作ったのですが、とんでもないところにはまってしまったので自戒を込めて書き記します。
書こうと思ったのは、LTSVの形式で書いてあるファイルを読み込み、URLをリンクにして表示する、という単純なもの。
…だったのですが、すっかりハマってしまいました。
|
|
ものはこんな感じだったのですが。
何がいけなかったのかわかりますか?
$self->stash(data => $data)
の部分がダメなところでした。
Mojoliciousでは、data
で渡された場合、それをバイナリのデータとしてレスポンスを返してしまいます。
なので、$data
がスカラとして出力されていました。
この時、私のガチガチに固まった私の頭は、モジュールが返している値が違うんじゃないかと思っていました。
Mojoliciousから離れて、普通に画面に表示するまで、全く気づきませんでした。
dataは禁物
バイナリデータを直接返すことはあまりないとは思いますが、必要だからあるのでしょう。
で、このような初歩的なところでハマった言い訳としては、最近、JavaScript(とかjQuery)ばかり使っていたからかな…と思っています。
JavaScriptをいじっていると好む好まないにかかわらず、やたらとdata
という変数が出てきます。
イベントオブジェクトから引数を取り出すのもdata
だし、HTMLから値を渡すのに使う属性もdata-*
だし、jQueryのAPIを見ていても、コールバックで受け取る引数がdata
になっていたり、とにかくdata
だらけでした。
それで、深く考えず$datafile
という変数を使ってしまったのが運の尽き。
教訓
安易にdata
という変数は使うな。
名前は重要です。