Perl leitet einige aus dem Skript heraus und einige auf den Bildschirm weiter

Perl leitet einige aus dem Skript heraus und einige auf den Bildschirm weiter

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 STDOUTals auch STDERR. Die printFunktion in Perl ist eigentlich die Kurzform für print STDOUT.

In Ihrem Terminal STDOUTwird der Datei-Handle angegeben 1und STDERRder 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 STDOUTund druckt nurSTDERR
  • Der dritte Befehl verwirft STDERRund 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.

verwandte Informationen