昨日、ひさびさに登場したアプリさんのリクエストでボットにどこしょ風の応答をさせる機能を付けてみました。ちなみにどこしょについての説明はパス(笑)。サブルーチンはこんな感じ。
#-------------------------------------------------- # どこしょ風レス作成(99/11/11) #-------------------------------------------------- sub dokosyo { my $word = $_[0]; my %key_list_file = ( '[人物]' => "$jinbutsu_file", '[場所]' => "$basho_file" ); my @keyword = keys(%key_list_file); my @key_list; my $rand; my $key2; foreach $keyword (@keyword) { if ($word =~ /$keyword/) { open(DB, "$key_list_file{$keyword}") || ended('$key_list_file open error'); @key_list = (<DB>); close(DB); while ($word =~ /$keyword/) { srand; $rand = rand(@key_list); $key2 = $key_list[$rand]; chomp $key2; if ($key2 eq $key_list[0]) { @key_list = @key_list[1..$#key_list]; } else { @key_list = @key_list[0..($rand-1),($rand+1)..$#key_list]; } $word =~ s/$keyword/$key2/; } } } return $word; } #ここまで
とりあえずこの例では使えるキーワードは"[人物]"と"[場所]"だけですが、%key_list_fileを書き換えて、キーワードリストファイルを作ればいくつでも増やせます。"[人物]"、"[場所]"のキーワードリストはそれぞれ$jinbutsu_file、$basho_fileで、ボットの各種辞書ファイルと同様にbot.plの先頭部分に記述してください。キーワードは改行で区切って記述すること。このサブルーチンはbot.plの適当な場所にコピーしてください。
使い方は、例えば
$resword = &dokosyo($resword);
とすれば変数$resword中の"[人物]"、"[場所]"という文字列をそれぞれキーワードリスト中の単語でランダムに置換して返します。実際の場合は$reswordを処理を行いたい文字列が入っている変数名で置き換えてください。
とまあ、簡単に解説してみましたが・・・簡単すぎてわけわかめかも。まあ、興味があったら事故責任でちゃれ〜んじ!ってことでよろしく。というわけで、自前のサブルーチンはこんな感じで公開してみようかと思う今日この頃。でも、これみたいに改造部分だけをきれいに分離できてないと解説がめんどくさいんですがねぇ。