Wobei auch mal
die "bar"
zum Einsatz kommt. Aber das sollte doch was die Ausgabe angeht
äquivalent zu
print STDERR "bar"
sein, oder?
Ich stehe gerade aufm Schlauch. Ich möchte gerne STDOUT und STDERR
synchronisieren, d.h. Ausgaben[0] sollen in der Reihenfolge auf
der Console (Debian Squeeze, Perl 5.10.0 built for i486-linux-gnu-
thread-multi) erscheinen, wie sie vom Programm herausgeschrieben
werden. Ich war immer der Meinung es würde dafür reichen, am Anfang
des Programms ein
$| = 1;
zu machen. Denn das Durcheinanderwürfeln der Meldungen liegt doch
daran, dass STDOUT gepuffert wird und STDERR nicht. Oder habe ich da
was missverstanden? (Anscheinend, sonst würd's ja funktionieren...)
Oder ist das gar nicht Perl's Schuld und meine Konsole[1] mischt da
STDOUT und STDERR?
Was ich nicht möchte, ist STDERR und STDOUT zusammenzulegen. Ich will
schon noch an der Kommandozeile mit
./script 1>stdout.out 2>stderr.out
filtern können.
Was kann man da machen?
Schöne Grüße!
Tobias
[0] also a la
print "foo"
bzw.
print STDERR "bar"
[1] urxvt mit bash
Wenn Du STDOUT und STDERR ungepuffert ausgibst, sollten die
Ausgaben in chronologischer Reihenfolge erscheinen.
Beschreib mal genauer, was bei dir passiert.
Gr��e
Frank
--
Dipl.-Inform. Frank Seitz
Anwendungen f�r Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Homepage: http://www.fseitz.de/
XING-Profil: http://www.xing.com/profile/Frank_Seitz2
In etwa das:
...
$|=1;
...
print "foo"
...
die "bar"
...
Und die Ausgabe ist dann
bar at ...
foo
Obwohl ich
foo
bar at ...
wollte. Muss ich denn bei STDERR auch explizit auf ungepufferte Ausgabe
umstellen? Ich dachte das ist standardmäßig an. Habe das Skript erst
morgen wieder vor Augen, dann versuche ich das mal.
Also bei mir kommt das raus, was ich erwarte:
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
print "foo";
die "bar";
__END__
foobar at ./test.pl line 8.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz
Anwendungen für Ihr Internet und Intranet