Perl átirányított STDIN

Itt ez a nagyszerű perl program:


#!/usr/bin/perl
while( $input=<STDIN> )
{
    print uc($input);
}

Soronként olvassa STDIN-t, majd a sorokat nagybetűre konvertálva kiírja. Ha parancssorból indítom, jól működik.

Csakhogy a programot egy másik program gyerekprocesszeként akarom használni, ilyenkor az STDIN/STDOUT egy-egy pipe-ba van irányítva. Az a baj, hogy az STDIN olvasásából addig nem jön vissza, amíg a másik oldal (a szülő) le nem zárja a pipe-ot. Nekem ehelyett az kellene, hogy a child processz soronként válaszoljon.

Szerk: Ha a fenti programot kicserélem a C megfelelőjére, ami filedescriptorokon működő read() hívásokkal van megírva, akkor parent és child jól kommunikál. Sejtésem szerint az a baj, hogy a Perl fd-k helyett streameket használ.

Hozzászólások

Szerintem csak egy flush hiányzik a szülő/termelő processz oldaláról, bufferelve van az adatfolyam.

--
The Net is indeed vast and infinite...
http://gablog.eu


$| = 1;
while( ... )
{
    print uc($input);
}

Igazából persze bonyolultabb volt a Perl program, amivel bajlódtam: a Vonyó-féle angol-magyar szótár. Ez egy text adatbázis, amit egy kis Perl programmal lehet lekérdezni, amihez most csináltam játékból egy CCC/jterminálos frontendet. Jáva futtatókörnyezet (javaws) kell hozzá.
--
CCC3