Thread Vor kopieren warten bis Subroutine abgeschlossen (28 answers)
Opened by giordano at 2010-02-17 14:50

sid burn
 2010-02-20 18:08
#133383 #133383
User since
2006-03-29
1520 articles
BenutzerIn

user image
Code (perl): (dl )
$| = 1

schaltet den Ausgabepuffer nicht ab. Dieses lese ich immer wieder was aber falsch ist. Als erstes wird nur "AutoFlush" aktiviert, daher der Puffer existiert immer noch, nur wird dieser immer schnellstmöglicht geleert wie es geht.

Ansonsten mag das zwar fast noch egal und kleinkarriert wirken. Viel wichtiger ist aber das das was "$| = 1" macht genau beschrieben ungefähr so lautet:

Quote
Auf dem derzeit aktiven Handle wird ein AutoFlush aktiviert.


Was ist das derzeit aktive Filehandle? Standardmäßig ist das lediglich "STDOUT". Das heißt mit "$| = 1" schaltet man AutoFlush für STDOUT aktiv. Aber nicht global für alle Dateihandles. Daher wenn er ein "print $OUTPUT 'asd'" hat ist $OUTPUT nicht davon betroffen.

Deswegen ist meine empfehlung auch das "$| = 1" gefrickel zu vergessen. Und stattdessen "use IO::Handle" einzubinden. Hat man das gemacht kann man auf jedem Dateihandle einfach eine Methode aufrufen um autoflush zu aktivieren.

Code (perl): (dl )
1
2
3
4
5
6
use IO::Handle;

STDOUT->autoflush(1);

open my $fh, '>', 'asd.txt' or die $!;
$fh->autoflush(1);
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Vor kopieren warten bis Subroutine abgeschlossen