我开发了一个脚本(主要通过访问多个解决方案并将我最喜欢的方法混合在一起)来查找和替换文件中的单词。这些文件都包含在目录中。出于某种原因,我的脚本进入了一个无限循环,但它似乎有效。
我很感激为什么它不会退出循环的任何解释。
#!/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;
}
答案 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
。
这是一个基本的调试练习。深入到程序中,直到达到您发现它没有按照您的想法进行的级别。验证每一步的所有内容。
然后,打开警告。 :)