当サイトはQ&A掲示板(コミュニティ)の窓口を共有して下さるサイト様を募集しています。
[Q&A掲示板] 共有サイト様募集!#!/usr/bin/perl # 検索の対象とする拡張子 @SEARCH = ('html', 'htm', 'shtml'); # デコード処理 if($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } @args = split(/&/, $query); foreach $i (@args) { ($name, $val) = split(/=/, $i); $name =~ tr/+/ /; $name =~ s/%([0-9a-fA-F]{2})/pack('C', hex($1))/eg; $val =~ tr/+/ /; $val =~ s/%([0-9a-fA-F]{2})/pack('C', hex($1))/eg; $in{$name} = $val; } unless($in{'word'}) { print "Content-type: text/html\n\n"; print "検索ワードを入力してください!\n"; exit; } $in{'word'} =~ s/ / /g; @word = split(/ /, $in{'word'}); opendir(DIR, "./"); while($file = readdir(DIR)) { my($f) = 0; foreach(@SEARCH) { $f = 1 if($file =~ /$_$/); } next unless($f); $f = 0; open(DATA, "< $file"); my(@line) = <DATA>; close(DATA); # 検索開始 # ワード一致回数重複カウント防止ハッシュの初期化 undef(%tmp); foreach $w (@word) { foreach $l (@line) { # 検索ワードが一致したなら$rank{$file}(信用度)に一致した個数を代入加算する $rank{$file} += $l =~ s/$w/$w/gi; # タイトル取得 if($l =~ /<title>(.+)<\/title>/i) { $title{$file} = $1; } # ワードが一致していて、さらにこれ以前にワードが一致していなかったら(重複カウント防止が偽なら) if(!exists($tmp{$w}) && $l =~ /$w/i) { # 重複カウント防止ハッシュに真を代入 $tmp{$w} = 1; # ワード一致数を加算 $f++; } } } # タイトルが取得できなかったら unless($title{$file}) { $title{$file} = 'タイトルなし'; } # ワード一致数とワード数が同じなら if($f == @word) { # 検索結果へ追加 push(@url, $file); } } closedir(DIR); $n = @url; print "Content-type: text/html\n\n"; if($n) { # 信用度順に並び替えて出力 foreach(sort { $rank{$b} <=> $rank{$a} } @url) { print "・ <a href=\"$_\">$title{$_}</a> 信用度($rank{$_})\n<br>"; } } else { print "一致するワードはありませんでした。\n"; }