PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: sofort in Datei schreiben



megamimi
06.05.2003, 12:40
hi...

Ich habe vor kurzem durch Zufall herausgefunden, dass Perl erst nach dem Ende des Programs in Dateien schreibt. Also wenn man

#! /usr/bin/perl -w

open(TEST,">blabla.txt") or die("$!\n");

print TEST "BLABLABLABLA\n";

while(1){}

close(TEST); schreibt und das Program mit ^C beendet, hat blabla.txt keinen Inhalt. Nun meine Frage: Wie kann ich erreichen, dass sofort beim ausführen von print in die Datei geschrieben wird, also in etwa so wie bei flush unter C++?

danke, mimi

PS: nich schlagen wenns ne dumme frage is, aber ich bin halt noch kein perl-gott:D

ExRevel
06.05.2003, 14:33
Nun gut, es gibt da ein paar moeglichkeiten das zu machen...

Du koenntest rein theoretisch wenn du C kannst einfach den C-Code den du brauchst in Perl einbinden an den entsprechenden Stellen, hier erhaelst du alle wichtigen Informationen:

http://www.perldoc.com/perl5.8.0/pod/perl.html

Das ist dann etwas uebermaeßig aufwendig, gell! Also geht das bei perl natuerlich auch anders... du musst die Autoflush-Flag von dem benutzen filehandle auf true setzen, dann wird sofort an die datei uebergeben, das passiert bei einem print() oder write() normalerweise halt nicht, wird alles gebuffert... Also du setzt die Flag [$|] wie folgt:



$old_fh = select(OUTPUT_HANDLE);
$| = 1;
select($old_fh);


Auswaehlen des filehandles, dann flagsetzen und Variable des handles nochmal auswaehlen, ab nun wird fuer jedes zeichen das du sendest sozusagen der syswrite befehl benutzt und es ist drin und auch bei einem STRG+C passiert dir nix schlimmes mehr! :)

Nebenbei... es geht noch einmal anders.... :)



syswrite(OUT, $char, 1)


Hab ich mich net mit auseinandergesetzt, keine ahnung wie das so ist! :)

ciaoi Exi

megamimi
06.05.2003, 15:21
hi...

Danke, funzt einwandfrei:D

cu mimi

ExRevel
06.05.2003, 15:33
Na, das habe ich doch auch gehofft! *erleichtert ist* :) War ja schliesslich meine erste taetigkeit als Perlmoderator hier!

ciao Exi