DBIモジュールを使ってデータベースを叩いて、Template Toolkitで整形する簡単なお仕事をやってみた

昔はtomcatとかを使ってjsp&サーブレットで遊んでいたりしたんですけど、最近はWeb関連のところはほとんどやってませんでした。。。ということでこのままではインターン破滅なので、簡単な例をとりあえずやってみることに。

テーブルの作成とかはこの付近を参考にして適当に作る。DBを触るにしてもsqliteしか触っていなかったので、mysqlをportでインストール。

sudo port install mysql5 +server

Template Toolkitとか触ったことなかったので、この辺を参考にしながら適当に書いた。

CGI側のコード。

#!/opt/local/bin/perl
use strict;
use warnings;
use Template;
use DBI;

my $output;
my $template = new Template();
# DBへの接続とエラー処理
my $db = DBI->connect("DBI:mysql:test") || die "CONNECT ERROR $DBI::errstr";
# 結果を取ってくる
my $result = $db->selectall_arrayref("SELECT name, telno from phone");
# リファレンスをハッシュの値にするといいらしい
my $param = {result => $result};


$template->process('template.tt', $param, \$output,);
$db->disconnect;

print "Content-type: text/html\n\n";
print $output;
exit;

テンプレート側。

<html>
<head>
<title>DB test</title>
</head>
<body>
<table>
  <tr>
    <th>name</th>
    <th>telno</th>
  </tr>
[%- FOREACH res IN result %]
  <tr>
    <td>[% res.0 %]</td>
    <td>[% res.1 %]</td>
  </tr>
[%- END %]
</table>
</body>
</html>

ということでなんか動いた><。
DB test

/var/log/apache2/error_logを見ながらデバッグするとか死にたくなるようなことやってたんだけど、

  • CGI::Carp
  • KCatch.pm

などを使うとよいというのを教えてもらいました。Internal Server Error怖いです><。あとTemplate ToolkitのところでもDumperが使えるというのも教えてもらいました!!

参考にした本

Perl Cookbook

Perl Cookbook