Perl: цикл не будет продолжаться с указанными переменными - PullRequest
1 голос
/ 24 декабря 2011

Вот мой код:

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

Есть идеи, как заставить последующие поиски работать?Что-то не так с кодом?

1 Ответ

2 голосов
/ 24 декабря 2011

Эта программа пытается прочитать весь файл BIBLE для каждого слова в списке.Файл потребляется первым словом, а затем идет EOF для каждого слова после этого.Вам нужно закрыть и снова открыть файл BIBLE для каждого слова.Конечно, это потрясающе плохой способ сделать это.Проверьте Lingua :: Condordance в CPAN.

Или, как говорит Мэт, вы можете просто сделать seek(BIBLE, 0, 0);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...