解析機能の拡張について
おはようございます。いつもお世話になっています。
今回は解析機能の拡張についてお聞きしたいと思います。
解析機能については、かんたん作成.comさんのcgiをお借りしました。
http://www7a.biglobe.ne.jp/~wwwwww/analyzer/
これをベースに、検索ワードの集計機能を追加しようと思っております。
word1、word2に検索ワードの表示・分割がありますが、新たにword3を設けて分割されたものを集計し、表示する処理をしたいです。
集計については、前回までで教えていただいた正規表現を用いて自ら組んでみたのですが、変数が一致していないせいか上手く表示できません。
以下に検索ワードを処理しているプログラムを記載します。
elsif($FORM{'mode'} eq "word1" or $FORM{'mode'} eq "word2" or $FORM{'mode'} eq "word3") { #検索ワード
my ($n, $pair, $word);
if($referer =~ /\?/) {
my ($url, $query) = split(/\?/, $referer);
for($n = 0 ; $n < @search ; $n++) {
if($url =~ /$search[$n][1]/) {
foreach $pair (split(/&/, $query)) {
my ($key, $value) = split(/=/, $pair);
if($key eq $search[$n][2]) {
$word = $value;
last;
}
}
last;
}
}
if($word) {
$word =~ tr/+/ /;
$word =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
if($FORM{'mode'} eq "word1") {
++$freg{$word};
}
elsif($FORM{'mode'} eq "word2") {
my $word2;
$word =~ s/\x81\x40/ /g;
foreach $word2 (split(/\s+/, $word)) {
if($word2) {
++$freg{$word2};
}
}
}
#=====================================================================EDIT
elsif($FORM{'mode'} eq "word3") {
my %word_of = map {$_ => 0} %freg;
foreach my $search_key ( keys %word_of ) {
foreach my $word ( keys %word_of ) {
$word_of{$search_key}++ if $word =~ /$search_key/;
}
}
foreach ( sort ( keys %word_of ) ){
print "<table><tr><td>「$_」 </td><td> $word_of{$_} 件</td></table>\n";
}
}
#=====================================================================END
}
}
}
}
word3の項目が現在私が編集している部分です。
プログラム全体を通して、私自身が望む動作を可能とする部分の追加は行ったと思うのですが、見落としている点があるかもしれません。
また前述したように、変数が一致していないのかもしれません。
おかしな点に気づかれたら、お手数ですがお教え願えますか。
もしかしたら初歩的なミスをしているかもしれませんが、よろしくお願いいたします。
不明な点などございましたら、随時対応します。
ここでは書ききれないため、現在編集中のcgiファイルを添付データとして貼り付けておきます。
お礼
>残念ながらハッシュに入っていないキーを参照しているために出ている >ワーニングです。 あっ・・・ すいませんそうですね、そうですよね・・・ 大変基本的なところの解釈が間違っていたようです。 どうもご丁寧にありがとうございました。 解決しましたので、これで回答を締め切らせていただきます。