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)
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(在您的情况下),因此循环不会退出.
当您想知道为什么某个变量没有您期望的值时,请开始检查值:
while ( $i < $count ) {
s/prods55a/sapprda/;
$i=+1;
warn "\$i is now $i\n";
print;
}
Run Code Online (Sandbox Code Playgroud)
你会立刻看到你没有$i像你想象的那样递增.
这是一个基本的调试练习.深入到程序中,直到达到您认为不符合您想象的水平.验证每一步的所有内容.
并且,打开警告.:)