Forum Webscript.Ru

Программирование => Perl => Тема начата: TT от 23 Февраля 2007, 21:57:45

Название: Помогите найти глюк
Отправлено: TT от 23 Февраля 2007, 21:57:45
Привет всем. Помогите, а то у меня уже крыша едет и ни фига не соображает.
Вот кусок кода:

1 $seek_temp = "

первое
между первое(второе) третье

";
2 @title_words = ("первое", "(второе)", "третье");
3 foreach my $word (@title_words) {
4   $word = quotemeta($word);
5   $seek_temp =~ /$word/;
6   printf("\\n%s EQ %s \\t\\tFIND:%s", $title_words[$#title_words], $word, $&);
7   if ($title_words[$#title_words] eq $word) {
8      $after = substr($\', 0, 50);
9   } else {
10      $seek_temp = $\';
11   }
12   ($before) && ($between .= "->$`");
13   (!$before) && ($before = substr($`, -0, 50));
14 }

Вот что выводит printf:

третье EQ \\п\\е\\р\\в\\о\\е          FIND:первое
третье EQ \\(\\в\\т\\о\\р\\о\\е\\)       FIND:(второе)
\\т\\р\\е\\т\\ь\\е EQ \\т\\р\\е\\т\\ь\\е    FIND:третье

Кто-нить сможет объяснить почему на третьей итерации содержимое массива эскейпится?
Проблема убирается если закомментировать 4-ю строку.
:confused:
Заранее писиб
Название: Помогите найти глюк
Отправлено: TT от 24 Февраля 2007, 14:28:14
Нашел!!!
Вводим переменную:
4 my $dword = quotemeta($word);
5 $seek_temp =~ /$dword/;
6 printf("\\n%s EQ %s \\t\\tFIND:%s", $title_words[$#title_words], $dword, $&);

7-ю строку оставляем без изменений!!! ($word не заменяем на $dword)
Как я раньше этого не заметил...

Очень странно, что "eq" так себя ведет (..на нее грешу...).
Если кто сможет объяснить, буду признателен.
Название: Помогите найти глюк
Отправлено: TT от 26 Февраля 2007, 10:28:22
Весь сыр-бор из-за неправильного использования переменной цикла. НЕЛЬЗЯ ничего ей присваивать.  Стыдно... мне. Никогда так не делайте.