結論から結論から言いますと、render()メソッドを使って複数のテンプレートを作成するような場合は、formatやhandlerをちゃんと指定した方がいい、ということです。Mojoliciousを使っていく上で必ずハマるんじゃないかと私は勝手に思ってるんですが、ネット上ではあまり見かけない情報のようなので、私だけかもしれないですね・・・。解説まず、以下のようなMojoliciousプログラムがあります。テンプレートを読み込み、画面に表示するだけの単純なプログラムです。contact.mail.epメールテンプレート!ほげほげ実際にこのプログラムをmorboコマンドで起動しましょう。アクセスすると、上記のMojoliciousアプリが実行され、空っぽのテキストエリアが表示されている状態になればOKです。次に、以下のようにコメントアウトしてた部分を行頭の「#」を削除して有効にしてください。レンダー〜これで、メール本文がテキストエリアに入ってくると思うじゃないですか普通。ところが、ブラウザを更新させると、Mojoliciousのエラー画面が表示されます。found.なんていうエラーメッセージが見つかるかと思います。index.mail.epなんてファイル用意してませんがな。なる?これは、Mojoliciousの特性と言いますか、クセといいますか、render()に渡すformatやらhandlerやらは、ただの一過性の引数ではなく、スタッシュの値が書き換えられるものだからです。最初の9行目で一度、スタッシュの値($self->stash->{format})がmailになったんです。もんで、次のrender()の時(12行目)に、スタッシュに保存されていたmailの値がそのまま使われ、index.mail.epなんていうありえないテンプレートが指されたわけです。9行目をコメントアウトしてた状態(renderがひとつのみ)の時は、特にformatを指定してなかったので、標準でhtmlがレンダー対象となっていたようです。いうことで、render()2つ目もformatを指定した正しいソースはこちらになります。format=>'html');};〜めでたしめでたし!余談ですが、このMojoliciousのスタッシュというものは、ルーティングの時点で自動でセットできたり、to()メソッドで振り分け用に使ったり、テンプレート中に展開できたり、発想次第でかなり色々な使い方ができます。その分、最初ちょこちょこ躓く原因になるのですが、慣れてくるとかなり強力で、Perlらしいフレームワークだなぁと感じさせてくれる機能のひとつです。特定商取引法に基づく表記よくある質問お問い合せプレミアム会員サイトマップカザオキラボページ先頭へ。