2015-01-02 3 views
1

Я довольно новичок в кодировании в Perl и использую C-стиль для циклов. Я не уверен, почему следующая программа никогда не печатает значение 4 для $ l:Perl - Trouble With Loop Variables

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

Ваш внутренний цикл for имеет условие $i + $l < $minL. Если $l == $minL, то $i + $l < $minL будет ложным, даже если $i равно 0, поэтому цикл работает 0 раз и никогда ничего не печатает.

Возможно, вы хотите использовать <= для этого состояния?

Кстати, вот как вы могли бы написать то же самое (предполагая, что условие <=) с помощью Perl-стиль Foreach петли:

my $minL = 4; 
for my $l (reverse 1 .. $minL) { 
    for my $i (0 .. $minL - $l) { 
     print "$i $l\n"; 
    } 
} 
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++) {