Perl - 循环变量的麻烦

时间:2015-01-02 03:10:03

标签: perl

我对Perl编码很新,我习惯使用C风格的循环。我不确定为什么以下程序永远不会为$ l打印值为4:

use strict;
use warnings;

my $minL = 4;

for (my $l = $minL; $l > 0; $l--) {
    for (my $i = 0; $i + $l < $minL; $i++) {
        print "$i $l\n";
    }
}

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

您的内部for循环的条件为$i + $l < $minL。如果$l == $minL,则即使$i + $l < $minL为0,$i也将为false,因此循环运行0次并且从不打印任何内容。

也许您想使用<=作为条件?

顺便说一句,以下是使用Perl样式的foreach循环编写相同内容(假设<=条件)的方法:

my $minL = 4;
for my $l (reverse 1 .. $minL) {
    for my $i (0 .. $minL - $l) {
        print "$i $l\n";
    }
}

答案 1 :(得分:1)

在第一次迭代中:

for (my $l = $minL; $l > 0; $l--) {

$ l == $ minL

    for (my $i = 0; $i + $l < $minL; $i++) {

因此,在$ l递减之前,此块不会运行:

        print "$i $l\n";
    }

将内循环更改为:

    for (my $i = 0; $i + $l <= $minL; $i++) {