いやぁ・・・splice関数なんてもんがあったんですな。配列から要素外すの、あんなに苦労したってのにっ。ついでにキーワードリストファイルの所在もサブルーチン内に書くように変更。で、こんな感じになりました。
sub dokosyo { my $word = $_[0]; my %key_list_file = ( '[人名]' => './dic/jinbutsu.dat', '[場所]' => './dic/basho.dat', ); my @keyword = keys(%key_list_file); my @key_list; my $key2; srand; foreach $keyword (@keyword) { if ($word =~ /$keyword/) { open(DB, "$key_list_file{$keyword}") || ended('$key_list_file open error'); @key_list =; close(DB); while ($word =~ /$keyword/) { $key2 = splice(@key_list, rand(@key_list), 1); chomp $key2; $word =~ s/$keyword/$key2/; } } } return $word; }
むう、結構短くなりましたな。この例の場合、キーワードリストファイルはdicってディレクトリを掘ってそこに格納してあることになります。