
Wie leite ich aus dem Perl-Skript einige Ausgaben auf den Bildschirm und andere ausgewählte Ausgaben weiter?
Antwort1
Durch die Verwendung unterschiedlicher Dateihandles.
Standardmäßig haben Sie sowohl STDOUT
als auch STDERR
. Die print
Funktion in Perl ist eigentlich die Kurzform für print STDOUT
.
In Ihrem Terminal STDOUT
wird der Datei-Handle angegeben 1
und STDERR
der Datei-Handle wird angegeben 2
.
Hier ist ein Beispiel für das Drucken in jeden Datei-Handle und die Umleitung jedes einzelnen nach /dev/null.
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";'
foo
bar
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 1> /dev/null
bar
% perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 2> /dev/null
foo
- Der erste Befehl druckt beides.
- Der zweite Befehl verwirft
STDOUT
und druckt nurSTDERR
- Der dritte Befehl verwirft
STDERR
und druckt nurSTDOUT
Sie können auch Ihre eigenen Datei-Handles deklarieren (z. B. eine Protokolldatei) und stattdessen dorthin drucken. Siehe perldoc -f open
.
Antwort2
Sie möchten wahrscheinlich die Perlipc-Dokumentation lesen, insbesondere den Abschnitt zu Named Pipes.
http://perldoc.perl.org/perlipc.html#Named-Pipes
perlipc – Perl-Interprozesskommunikation (Signale, FIFOs, Pipes, sichere Unterprozesse, Sockets und Semaphoren)
Wenn Sie eine bidirektionale (Lese- und Schreib-)Kommunikation mit einem externen Programm benötigen, sind die Module IPC::Open2 oder IPC::Open3 (Standard-Perl-Bibliothek, auch in der obigen URL dokumentiert) hilfreich.