There is more than one way to do it.
Ein simpler Test zeigt den massiven Performance-Unterschied:
#!/usr/bin/perl -w
# vim: set sw=4 ts=4
use strict;
use warnings;
use Benchmark qw(cmpthese);
my @cmd_sauber = qw(/bin/true ignoriert);
my $cmd_back = join(" ", @cmd_sauber);
cmpthese(10000, {
BackTicks => sub { `$cmd_back` },
Sauber => sub { open CMD, '-|' or exec @cmd_sauber; close CMD },
});
Das ganze ergibt sowas:
Rate BackTicks Sauber
BackTicks 12346/s -- -16%
Sauber 14706/s 19% --
Bedeutet: Backticks machen rund 2000 Aufrufe pro Sekunde weniger.
Du kannst die Ausgabe eines Programms auch ohne einen Shell Aufruf angucken:
my @cmd = qw(/bin/irgendwas -optionen);
open CMD, '-|' or exec @cmd or die("exec failed: $!"); # das kommando wird ausgefuehrt
while( <CMD> ) { ausgabe_verarbeiten($_) } # die aktuelle zeile befindet sich in $_
close CMD;
Ich hoffe, dass ich weiterhelfen konnte.
Shunsui