2010-10-26 3 views
1

Я разработал сценарий (в основном, посетив несколько решений и объединив свой любимый), чтобы найти и заменить слова в файлах. Все файлы содержатся в каталоге. По какой-то причине мой скрипт переходит в бесконечный цикл, однако кажется, что он работает.Почему мой цикл Perl-скрипта бесконечно?

Буду признателен за то, почему он не выйдет из цикла.

#!/usr/bin/perl -i.bak 
my $DIRECTORY = '/home/mrk28/testing/findreplace'; 
opendir (DIR, $DIRECTORY); 
@count = readdir(DIR); 
my $count = @count; 
print $count-2; 
my $i = 0; 
while ($i < $count) { 
    s/prods55a/sapprda/; 
    $i=+1; 
    print; 
} 

ответ

13
$i=+1; 

должен быть

$i+=1; # or, ++$i; 

Первый из них будет установлен $i к +1 (т.е. 1) в каждом цикле, что в всегда меньше, чем $count (в вашем случае), поэтому цикл вон Выход.

+0

Спасибо. Очевидно, я новичок в perl. – MikeKusold

15

Именно поэтому вы всегда должны позволить warnings при написании Perl (а также с помощью strict):

$ perl -e 'use warnings; my $i; $i =+ 1' 
Reversed += operator at -e line 1.
5

Когда вы удивляетесь, почему какая-то переменная не имеет значения, что вы ожидаете, начать проверку значения:

while ($i < $count) { 
    s/prods55a/sapprda/; 
    $i=+1; 
    warn "\$i is now $i\n"; 
    print; 
    } 

вы бы видели сразу, что вы не увеличивающиеся $i, как вы думаете.

Это базовая практика отладки. Проснитесь в программу, пока не достигнете уровня, на котором вы обнаружите, что он не делает то, что вы считаете. Проверяйте все на каждом шаге.

И, включите предупреждения. :)

Смежные вопросы