这是我的代码:
while (<LIST>) {
if (m|^\w|) {
chomp;
print "$_\n";
}
if (m|^\t|) {
chomp;
$search = substr($_, 1);
print " $search\n";
while (<BIBLE>) {
while ($_ =~ /\b$search\b/ig) {
$book = substr($_, 0, 2);
$chap = substr($_, 3, 3);
$verse = substr($_, 7, 3);
print " $book:$chap:$verse\n";
}
}
}
}
所以,基本上,我有一个单词列表和一个语料库。我从仅以制表符开头并将这些单词作为搜索词的行开始。然后,我想要搜索BIBLE文件句柄以查找该搜索词的每次出现。它按预期工作在第二个主循环中。它正在进入循环以打印列表中的剩余单词,但不会重新分配$ search变量并在语料库中连续搜索每个单词。这是输出:
headword1
abahandiiki
41:001:022
41:002:016
41:003:022
41:007:005
41:008:031
41:009:011
41:009:014
41:009:016
41:010:033
41:011:018
41:011:027
41:012:035
41:012:038
41:014:001
41:014:043
41:014:053
41:015:001
41:015:031
43:008:003
abahe
abaheereza
headword2
baheereza
baheerezakazi
bahiire
bahikiirire
bahingi
bahungire
headword3
okurikuhikiirizibwa
okurikushushana
okurikusiimwa
okurikwera
okurogota
okuruga
okurugirira
okurungi
okurwanisa
okurya
okushaagaana
okushara
有关如何进行后续搜索的任何想法?代码有问题吗?
答案 0 :(得分:2)
该程序正在尝试读取列表中每个单词的整个BIBLE文件。第一个单词正在使用该文件,然后在每个单词之后使用EOF。您需要关闭并重新打开每个单词的BIBLE文件。当然,这是一个非常糟糕的做法。在CPAN中查看Lingua::Condordance。
或者如Mat所说,你可以做seek(BIBLE, 0, 0);