我对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";
}
}
非常感谢提前。
答案 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++) {