#!/usr/local/bin/perl # $Id: search-1.cgi,v 1.3 2006/02/04 07:11:40 68user Exp $ use strict; require 'jcode.pl'; my $start_time = times(); $|=1; my @keywords; # 検索対象となるキーワード # 引数解析 foreach ( split(/&/, $ENV{QUERY_STRING}) ){ my ($name, $value) = split(/=/, $_); if ( $name eq 'keyword' ){ $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; &jcode::convert(\$value, 'euc'); # 前後の空白を削除 my $jisx0208_space = ' '; $value =~ s/^(\s|$jisx0208_space)+//; $value =~ s/(\s|$jisx0208_space)+$//; foreach my $keyword (split(/\++/, $value)){ push(@keywords, $keyword); } } } print "Content-type: text/html; charset=EUC-JP\n\n"; print qq(
\n); print "FreeBSD-users-jp を「%s」で検索します。
\n", escape(join(' ', @keywords))); my $freebsd_users_jp_url = 'http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp'; # メールのファイル名を @files に格納 my $maildir = '../../freebsd-users-jp'; opendir(DIR, $maildir); my @files = grep(/^[0-9]+$/, readdir(DIR)); my $found_filenum = 0; # マッチしたファイル数 my $max_found_filenum = 100; # これ以上マッチしたら検索を打ち切る foreach my $filename (sort {$a <=> $b} @files){ my @match_line; # マッチした行を格納するための配列 my %already_found; # 発見済キーワードを登録しておくハッシュ my $all_found_flg = 0; # 全キーワードを発見したら 1 に open(IN, "$maildir/$filename"); LINELOOP: while (my $line=\n"; print "$found_filenum 件見つかりました。\n"; if ( $found_filenum == $max_found_filenum ){ print "$max_found_filenum 件見つかったので、検索を打ち切りました。"; } print "
\n"; printf("ユーザモード CPU 消費時間: %.2f秒\n", times()-$start_time); print "