为什么我的Perl脚本无限循环?

时间:2010-10-26 20:03:34

标签: perl while-loop infinite-loop

我开发了一个脚本(主要通过访问多个解决方案并将我最喜欢的方法混合在一起)来查找和替换文件中的单词。这些文件都包含在目录中。出于某种原因,我的脚本进入了一个无限循环,但它似乎有效。

我很感激为什么它不会退出循环的任何解释。

#!/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;
}

3 个答案:

答案 0 :(得分:15)

这就是为什么在编写Perl时应始终启用warnings(以及使用strict):

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

答案 1 :(得分:13)

$i=+1;

应该是

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

前者会在每个循环中将$i设置为+1(即1),总是小于$count(在您的情况下),因此循环不会退出。

答案 2 :(得分:5)

当您想知道为什么某个变量没有您期望的值时,请开始检查值:

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

你会立刻看到你没有像你认为的那样递增$i

这是一个基本的调试练习。深入到程序中,直到达到您发现它没有按照您的想法进行的级别。验证每一步的所有内容。

然后,打开警告。 :)