topeg+2007-08-05 00:01:22--Es gibt die vordefinierte Variable "$|", die sämtliche Puffer für alle geöffneten Filehandles (Ein/Ausgabestreams) abschaltet.
Nein, das ist Falsch!!!
Wenn du $| auf True setzt, dann wird
nur der aktuelle Aktive Filehandle ungebuffert gesetzt, und nicht sämtliche Buffer. Weiterhin wird mit $| nur die Ausgabe auf ungepuffert gesetzt, und nicht die Eingabe!
Wenn du die eingabe ungepuffert haben möchtest, musst du meistens spezielle ungepufferte Funktionen nutzen. Zum Beispiel mit "sysread()" von einem Filehandle lesen, anstatt "<$fh>" etc.
Wenn du z.B. einem Filehandle auf ungebuffert setzen möchtest, dann musst du zuerst mit select() den Filehandle setzen, die rückgabe Speichern, $| auf true setzen. Und wieder zurück zum alten Filehandle wechseln. z.B. so:
my $oldfh = select( $filehandle );
$| = 1;
select( $oldfh );
das ist ziemlich unpraktisch. Daher empfehle ich IO::Handle. Das hat eine Methode um ein spezielles Filehandle auf unbuffered zu stellen. und das select() gedönse da oben fällt weg.
use IO::Handle;
my $fh, '>', $filename or die $!;
$fh->autoflush( 1 );
....
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de