Этот код C отображает числа Фибоначчи:
#include <stdio.h>
int main(){
for (long long int t, i=1, p=1, f=2; f>0 ; i++, t=f, f+=p, p=t)
printf("%lli: %lli\n", i, f);
}
Как и положено, он останавливается без необходимости жесткого кодирования числа итераций.
Код в Perl пытается использовать ту же технику:
my $t;
my $p=1;
my $f=2;
for ($i=1; $f>0; $t=$f, $f+=$p, $p=$t, $i++){
printf("%i: %i\n", $i, $f);
if ($i>50){exit;}
}
Но он не останавливается, как ожидалось, в тот момент, когда значение переполняется на 45, а не на 51, когда начинается дополнительная проверка.
44: 1836311903
45: -1323752223
46: -1
47: -1
48: -1
49: -1
50: -1
51: -1
Что делает Perlиначе что вызывает это?