Frage

Perl unterstützt drei Arten (die ich kenne) die laufenden externe Programme:

system:

   system PROGRAM LIST

, wie in:

system "abc";

Backticks wie in:

`abc`;

läuft es durch ein Rohr, wie in:

open ABC, "abc|";

Was sind die Unterschiede zwischen ihnen? Hier ist, was ich weiß:

  1. Sie können die Backticks und Rohrleitungen verwenden, um die Ausgabe des Befehls leicht zu erhalten.
  2. das ist es (mehr in Zukunft Änderungen?)
War es hilfreich?

Lösung

  • System (): läuft Befehl und kehrt Befehl Exit-Status
  • Backticks: läuft Befehl und gibt den Befehl Ausgang
  • Rohre: läuft Befehl und ermöglicht es Ihnen, verwenden, um sie als handle

Auch Backticks leiten das STDOUT der ausgeführten Programms auf eine Variable, und das System sendet sie an Ihr Hauptprogramm STDOUT.

Andere Tipps

Die perlipc Dokumentation erläutert die verschiedenen Möglichkeiten, wie Sie mit anderen Prozessen von Perl in Wechselwirkung treten können, und perlfunc offene Dokumentation verrohrt Dateihandies erklärt.

  • Das System sendet seine Ausgabe an die Standardausgabe (und Fehler)
  • Die Backticks fängt die Standardausgabe und gibt es (aber nicht Standardfehler)
  • Die verrohrt offen können Ihnen die Ausgabe erfassen und aus einer Datei-Handle lesen oder in eine Datei Griff zu drucken und als Eingang für den externen Befehl verwenden.

Es gibt auch Module, die diese Details mit den plattformübergreifenden Grenzfälle behandeln.

System kehrt auch den Exit-Wert der Anwendung (Error-in Windows). Die Rohre sind ein bisschen komplizierter zu verwenden, da aus ihnen zu lesen und zu schließen sie zusätzlichen Code hinzufügt. Schließlich haben sie unterschiedliche Implementierung, die verschiedene Dinge tun sollte. Mit Rohren Sie in der Lage sind, mit den ausgeführten Anwendungen zu kommunizieren zurück, während die anderen Befehle, die nicht zulässt, dass (leicht).

Ankommen des Exit-Status des Programms nicht zu system() beschränkt ist. Wenn Sie close(PIPE) nennen, es gibt den Exit-Status, und Sie können den neuesten Exit-Status für alle drei Methoden von $? erhalten.

Bitte beachten Sie auch beachten, dass

readpipe('...')

ist die gleiche wie

`...`
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top