[megoldva] perl késleltetett kiírás

sziasztok!

fura jelenség került elém perl "tanulgatásom" közben, hátha szakavatottak tudnának segíteni a megértésében. (előre bocsátom, hogy elég alap dolgokat ismerek a perl scriptekről, lehet ebből adódik valami elvi hibám). roppant egyszerű scriptet akartam gyártani, amolyan "hogy is kell" címen. egy szál ciklus volt benne (for), abban történt egy kiértékelés a ciklusváltozóra nézve, majd a ciklus végén némi output. mivel lassú volt, ezért a folyamatot is meg akartam figyelni és a ciklusmagba beraktam pár print-et, hogy lássam hol tart épp.

legnagyobb meglepetésemre a printek a ciklus után "egyszerre" jelentek meg. ilyet még nem láttam, ezért próbáltam debugolni, majd másnak is megmutatni (az illető jóval többet programozott, gondoltam hátha lesz ötlete). nem értettük. ezután a sok kísérlet után kerültek bele a printek mellé felhasználói inputok is (STDIN olvasás). innentől a program jól működött. kigyomláltuk az összes "szemetet" (vissza az eredeti kb. 5 soros programhoz!) és továbbra is jól működött a program!

mi lehet az oka annak, hogy a program csak a végén írt ki mindent?? tény, hogy nem vagyok programozó, de egy sima for ciklus, benne if és print nem kéne, hogy ennyire ismeretlen rejtélyt produkáljon :) (gondoltam én...)

a környezet egy win-es gép, perl 5.10valami. a kód kb az alábbi "bonyolultságú volt":


use Net::Ping;
$p = Net::Ping->new("icmp");
$elnek="";
for ($ip = 2; $ip<101; $ip++) {
$host="10.0.0." . $ip;
if ( $p->ping($host, 1)) {
$elnek .= " $ip";
print "Aktiv: $ip\n";
}
}
print $elnek;

Hozzászólások

Bufferelve ir ki a terminalra a perl, igy ha nincs az autoflush bekapcsolva (amit a kollega emlit elottem), akkor a karakterek csak akkor kerulnek ki a kepernyore, ha kuldesz ki egy sortorest is. Ha tettel volna a print-be egy "\n" -t, akkor realtime megjelentek volna a sorok. Masik megoldas az autoflush bekapcsolasa.

egy perldoc perlstyle sem fog megartani es perltidy is hasznos

hm... az ember mindig tanul valami érdekeset :) a legtöbb esetben írok az ilyen kiiratások után sortörést, viszont pont a kérdéses példa debugolásakor nem tettem. köszönöm szépen a segítséget!

--
xterm