Schrift
[thread]8167[/thread]

flush-Befehl

Leser: 5


<< >> 8 Einträge, 1 Seite
miwieg
 2006-07-16 11:38
#68115 #68115
User since
2006-07-16
59 Artikel
BenutzerIn
[default_avatar]
Hallo!

Wie kann ich nach einem print-Befehl nach STDOUT in Perl sagen, dass zusätzlich "geflusht" werden soll?

Vielen Dank im Voraus!
Linuxer
 2006-07-16 11:47
#68116 #68116
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

Du kannst die Variable $| auf ungleich Null setzen, dann findet eine ungepufferte Ausgabe statt.

Code: (dl )
1
2
$| = 1;
# ... your code


perlvar
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
miwieg
 2006-07-16 11:50
#68117 #68117
User since
2006-07-16
59 Artikel
BenutzerIn
[default_avatar]
Vielen Dank!

Habe ich das richtig verstanden, dass der Befehl am Anfang eines Skripts gesetzt wird und dann global für das ganze Programm gilt?
styx-cc
 2006-07-16 12:17
#68118 #68118
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Ja, das hast du meines Wissens nach richtig verstanden...
Wenn du das Puffern wiederhaben moechtest setzt du die Variable einfach 0:
Code: (dl )
$|=0;


MfG
Pörl.
topeg
 2006-07-16 14:05
#68119 #68119
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Wenn du das Flushen nur lokal haben willst, dann kannst du innerhalb eines Blockes ("{...}") den Wert mit "local $|=1;" setzen. Wenn der Block dann verlassen wird, hast du die globale Einstellung wieder.
murphy
 2006-07-16 18:04
#68120 #68120
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Linuxer,16.07.2006, 08:47][...] Du kannst die Variable $| auf ungleich Null setzen, dann findet eine ungepufferte Ausgabe statt. [...][/quote]
Genau genommen ist die normale Ausgabe bei Perl, zum Beispiel mittels print, immer gepuffert, egal wie $| gesetzt ist und die Ausgabe über syswrite ist immer ungepuffert.

$| auf einen Wert ungleich 0 zu setzen hat nur den Effekt, dass die Puffer nach jeder Schreiboperation geleert werden, was in etwa auf das gleiche wie eine ungepufferte Ausgabe hinausläuft, aber eben nur in etwa.

Übrigens kann man, wenn man nur gelegentlich die Ausgabepuffer leeren möchte statt autoflush auch die Methode flush aus dem IO::Handle Paket verwenden.

[edit: Tippfehler korrigiert]\n\n

<!--EDIT|murphy|1153059080-->
When C++ is your hammer, every problem looks like your thumb.
styx-cc
 2006-07-16 21:52
#68121 #68121
User since
2006-05-20
533 Artikel
BenutzerIn

user image
ahh... danke
Pörl.
Strat
 2006-07-17 20:34
#68122 #68122
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn dir das kryptische $| nicht gefaellt, kannst du auch mit
Code: (dl )
1
2
use IO::Handle;
autoflush STDOUT 1;

arbeiten (siehe CPAN:IO::Handle).
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 8 Einträge, 1 Seite



View all threads created 2006-07-16 11:38.