よくある検索用CGI(笑)
「文字列からのワード検索」

search.cgi

Perl はデータベース用としては非常に優れた言語です.しかも,コンパイラ依存ではないので変更などがテキストベースでスムーズに行えることが,CGIにもよく利用されている理由です.

■ CGI を起動する HTML のタグに

<FORM METHOD=POST ACTION="起動CGI名">
を記述する.入力フォームは, <INPUT TYPE="text" ....> または <TEXTAREA ....> のタグを使います.

■ 2つの入力を処理する CGI はこのようにします.

read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split (/&/,$buffer);
foreach $pair (@pairs)
{
  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $FORM{$name} = $value;
}
$source = $FORM{'source'};
$word = $FORM{'word'};
上の赤色の部分は,STDIN からのデータの読み込みを仮想変数として取り込む部分,その下の青い部分が,実際に HTML から変数に内容を入れ込む部分です.たとえば,HTML のフォームの方で,<INPUT TYPE="Text" NAME="test"> とした場合は,$test = $FORM{'test'} などとします.

■ 検索と結果表示部分に関してはこんな風にします.

print "Content-type: text/html\n\n";
print '<HTML><BODY>';
print '<FONT SIZE="3"><B>検索対象の「'."$word".'」は,</B></FONT><BR><BR><BLOCKQUOTE><FONT SIZE="2">';
@line = split (/\n/, $source);
$wcnt = 1;
foreach $linestr (@line) {
if ($linestr =~ /$word/i) {
  print "$wcnt".'行目:'."$linestr".'<BR>';
  }
  $wcnt++;
}
print '</FONT></BLOCKQUOTE><B>にあります.</B><BR><BR>';
print '<A HREF="../search.html">前のページに戻る</A>';
print '</BODY></HTML>';
動的に HTML 文章を表示します.必ず1行目は記述してください.$word,$wcnt などの変数を表示するときはダブルクォーテーション(")でくくります.4行目は改行(\n)ごとに検索対象の文章を行分離して, @line 変数に入れます.5行目では検索単語の行数表示用変数 $wcnt を "1" にリセットします.6行目以降は @line 変数から,行分離した文を $linestr に順次入れ,{}の中の処理を行います.{}の中の if 文は $linestr の中に,検索対象となる単語 $word があるかどうかを調べる記述です.存在すればその行を表示します.

上のテキストボックスには,検索対象となるの文章を入力してください.
下のテキストボックスには,その文章に含まれる単語を入力してください.

検索対象


検索単語



戻 る