【问题标题】:Why does my Perl script loop infinitely?为什么我的 Perl 脚本会无限循环?
【发布时间】:2011-04-30 23:05:50
【问题描述】:
我开发了一个脚本(主要是通过访问多个解决方案并将我最喜欢的组合在一起)来查找和替换文件中的单词。这些文件都包含在一个目录中。出于某种原因,我的脚本进入了无限循环,但它似乎可以正常工作。
如果它不会退出循环,我将不胜感激。
#!/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;
}
【问题讨论】:
标签:
perl
while-loop
infinite-loop
【解决方案1】:
当您想知道为什么某些变量没有您期望的值时,请开始检查值:
while ( $i < $count ) {
s/prods55a/sapprda/;
$i=+1;
warn "\$i is now $i\n";
print;
}
您会立即发现您并没有像您想象的那样增加$i。
这是一个基本的调试实践。深入研究程序,直到您发现它没有按照您的想法执行。验证每一步的所有内容。
然后,打开警告。 :)
【解决方案2】:
这就是为什么在编写 Perl 时应该始终启用 warnings(以及使用 strict):
$ perl -e '使用警告;我的 $i; $i =+ 1'
-e 第 1 行的反向 += 运算符。
【解决方案3】:
$i=+1;
应该是
$i+=1; # or, ++$i;
前者将在每个循环中将$i 设置为+1(即1),始终小于$count(在您的情况下),因此循环不会退出。