【问题标题】: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(在您的情况下),因此循环不会退出。

        【讨论】:

        • 谢谢。显然我是 perl 的新手。
        猜你喜欢
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-12
        • 2017-09-21
        • 2016-08-01
        相关资源
        最近更新 更多