Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Perl脚本无限循环?_Perl_While Loop_Infinite Loop - Fatal编程技术网

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

为什么我的Perl脚本无限循环?,perl,while-loop,infinite-loop,Perl,While Loop,Infinite Loop,我开发了一个脚本(主要通过访问多个解决方案并将我最喜欢的内容混合在一起)来查找和替换文件中的单词。这些文件都包含在一个目录中。出于某种原因,我的脚本进入了一个无限循环,但它似乎可以工作 如果您能解释一下为什么它不会退出循环,我将不胜感激 #!/usr/bin/perl -i.bak my $DIRECTORY = '/home/mrk28/testing/findreplace'; opendir (DIR, $DIRECTORY); @count = readdir(DIR); my $cou

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

如果您能解释一下为什么它不会退出循环,我将不胜感激

#!/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;
}
#/usr/bin/perl-i.bak
my$DIRECTORY='/home/mrk28/testing/findreplace';
opendir(DIR,$DIRECTORY);
@count=readdir(DIR);
我的$count=@count;
打印$count-2;
我的$i=0;
而($i<$count){
s/prods55a/sapprda/;
$i=+1;
印刷品;
}
应该是

$i+=1;    # or, ++$i;
前者将在每个循环中将
$i
设置为
+1
(即1),在您的情况下,该值始终小于
$count
,因此循环不会退出

应该是

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

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

这就是为什么在编写Perl(以及使用)时应该始终启用的原因:

$perl-e'使用警告;我的$i$i=+1'
Reversed+=运算符位于-e第1行。这就是为什么在编写Perl(以及使用Perl)时应始终启用的原因:

$perl-e'使用警告;我的$i$i=+1'
反向+=运算符位于-e第1行。当您想知道为什么某些变量没有您期望的值时,请开始检查这些值:

while ( $i < $count ) {
    s/prods55a/sapprda/;
    $i=+1;
    warn "\$i is now $i\n";
    print;
    }
while($i<$count){
s/prods55a/sapprda/;
$i=+1;
警告“\$i现在是$i\n”;
印刷品;
}
你会马上发现你并没有像你想象的那样增加
$i

这是一种基本的调试实践。深入研究这个程序,直到你发现它没有做你认为它是什么。每一步都要进行验证


和,打开警告。:)

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

while ( $i < $count ) {
    s/prods55a/sapprda/;
    $i=+1;
    warn "\$i is now $i\n";
    print;
    }
while($i<$count){
s/prods55a/sapprda/;
$i=+1;
警告“\$i现在是$i\n”;
印刷品;
}
你会马上发现你并没有像你想象的那样增加
$i

这是一种基本的调试实践。深入研究这个程序,直到你发现它没有做你认为它是什么。每一步都要进行验证


和,打开警告。:)

谢谢。显然,我是perl新手。谢谢。显然,我是perl新手。