To pipe or not to pipe

29/01/2010 - 11:00 von Helmut Schneider | Report spam
Hi,

http://www.perlhowto.com/executing_...l_commands

- $output = `$command`;
- open (OUTPUT, "$command |");

Gibt es einen Grund, warum man das eine dem anderen bevorzugen sollte,
wenn man (nur) am Output interessiert ist? Ist eins von beiden besserer
Stil, performed besser? Oder einfach nur "There are many ways to..."?

Danke und Gruß, Helmut
 

Lesen sie die antworten

#1 Moritz Lenz
29/01/2010 - 11:29 | Warnen spam
Hallo,

Helmut Schneider wrote:
http://www.perlhowto.com/executing_...l_commands

- $output = `$command`;
- open (OUTPUT, "$command |");

Gibt es einen Grund, warum man das eine dem anderen bevorzugen sollte,
wenn man (nur) am Output interessiert ist? Ist eins von beiden besserer
Stil, performed besser? Oder einfach nur "There are many ways to..."?



Die backticks warten, bis alle Zeilen von $command gelesen sind und
$command beendet ist. Bei großen Ausgaben braucht man auch viel Speicher.

Mit der Pipe kann man Zeilenweise (oder mit $/ = \1 sogar Zeichenweise)
lesen, und nach Gusto alte Ausgaben wegschmeissen.

Ausserdem bietet open() auch die Möglichkeit, so wie bei system(LIST)
eine Liste zu benutzen, und damit auf Escaping von Shell-Sonderzeichen
in $command und/oder Argumenten zu verzichten:

open my $handle, '-|', 'ls', '/directory/with spaces/' or die $!;

(Wobei ls natürlich ein doofes Beispiel ist, das geht mit
opendir/readdir besser).

Grüße,
Moritz

Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/

Ähnliche fragen