Perl:While循环不会继续使用指定的变量

Perl:While循环不会继续使用指定的变量,perl,Perl,这是我的密码: while (<LIST>) { if (m|^\w|) { chomp; print "$_\n"; } if (m|^\t|) { chomp; $search = substr($_, 1); print " $search\n"; while (<BIBLE>) { while ($_ =~ /\b$se

这是我的密码:

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";
            }
        }
    }
}

关于如何使后续的搜索工作有什么想法吗?代码有问题吗

此程序试图读取列表中每个单词的整个圣经文件。该文件被第一个字占用,然后每个字都被EOF占用。您需要关闭并重新打开每个单词的圣经文件。当然,这是一种非常糟糕的做法。在CPAN退房


或者正如Mat所说,你可以做一个
seek(圣经,0,0)

不需要关闭/重新打开,搜索应该足够了谢谢您的回答。能否提供一个示例来实现seek函数?我看了看perldocs,它说的话让我很困惑(新手)。谢谢。这是我做的。我添加了
seek(圣经,0,0)
作为主while循环中的最后一个命令。我假设把位置放回列表文件的开头?你能再详细解释一下为什么它不起作用吗?也许我没有跟上。谢谢
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