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

Mik*_*old 1 perl infinite-loop while-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;
}
Run Code Online (Sandbox Code Playgroud)

Sin*_*nür 15

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

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


ken*_*ytm 13

$i=+1;
Run Code Online (Sandbox Code Playgroud)

应该

$i+=1;    # or, ++$i;
Run Code Online (Sandbox Code Playgroud)

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


bri*_*foy 5

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

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

你会立刻看到你没有$i像你想象的那样递增.

这是一个基本的调试练习.深入到程序中,直到达到您认为不符合您想象的水平.验证每一步的所有内容.

并且,打开警告.:)