tenhle operator muze byt velice zradny, obzvlast u vetsich cisel. napriklad (pokus o generovani rady telefonnich cisel):
print "$_\n" for 420464647470..420464647479;
zpusobi chybu "Range iterator outside integer range", pritom s "rucni" iteraci vsechno funguje bez problemu:
for ($_=420464647470; $_ <= 420464647479; $_++) {
print "$_\n";
}
Mne to funguje (protoze mam 64 bitu :-)
Nicmene vtip je v tom, ze pri "rucni" iteraci iterujete pres floaty, ackoliv to neni videt. Range operator "umi" jen integery. Pro overeni muzete zkusit nasledujici kod.
for ($_ = 48446744073709551616; $_ <= 48446744073709551620; $_++) {
print "$_\n";
}
V tomto pripade uz neni ani float schopen reprezentovat uvedena cisla s presnosti na jednicku. Program se zacykli. (Pokud ne, muzete ta cisla jeste o par radu natahnout.) Nejjednodussi naprava je pouzit use bignum; na zacatku kodu.
(Podobny problem/reseni bude i v ukazkovem programu na pocitani Pascalova trojuhelniku.)