DBD::PgPP on Windows Vista

fetchがどうのこうので昨日失敗していたのは私がPostgreSQLをインストールした際に作ったデータベースの名称が当初のソースと違っていたためでした。ソースのデータベースの名前を変更した。
めでたい事にApache->ActivePerl->DBI->DBD::PgPP->PostgreSQLは出勤中の朝の電車の中で動作した。
いくつかのテーブルを作っていないとかあったけど、瑣末事です。
その後、プログラムを動作させるとエラーが出る。
Apacheのエラーログで

[Wed Jul 25 18:36:21 2007] [error] [client 127.0.0.1] Can't call method "db_connect" on an undefined value at C:/Users/hogehoge/Documents/cgi-bin/action.cgi line 227.\r, referer: http://localhost/cgi-bin/project.cgi

との内容。
調べてみたら、

$db1=DBI->connect("DBI:PgPP:host=$host;dbname=$dbname", $user, $passwd);
$st = $db1->prepare($SQL);
$res = $st->execute;
while(@res = $st->fetchrow){
  $st1 = $db1->prepare($SQL2);
  $res1 = $st1->execute;
  @res1 = $st1->fetchrow;
    :
  $st1->finish;
}

のようにDBI->connectで作成されたオブジェクトでfetchをかけた結果に対して再度SQLを発行しfetchする

  @res1 = $st1->fetchrow;

のあたりで発生している模様。
で、

$db1=DBI->connect("DBI:PgPP:host=$host;dbname=$dbname", $user, $passwd);
$st = $db1->prepare($SQL);
$res = $st->execute;
while(@res = $st->fetchrow){
  $db2=DBI->connect("DBI:PgPP:host=$host;dbname=$dbname", $user, $passwd);
  $st1 = $db2->prepare($SQL2);
  $res1 = $st1->execute;
  @res1 = $st1->fetchrow;
     :
  $st1->finish;
  $db2->disconnect;
}

のようにループの中で再度connectして$db2を作ってその$db2を使って検索かければうまく行った。まあ、本当にこれで良いかどうかはわからないけど動いたので結果オーライと言うことで。