Thread Stringvergleich geht nicht..
(18 answers)
Opened by introdev at 2019-10-07 17:36
system(...) liefert nur einen Wert für den erfolgten Ablauf an dein Perl-Programm zurück und nicht die Ausgabe. Du willst aber eigentlich beim gestarteten Programm dessen Ausgabe auf STDOUT haben. Da musst du dann das Programm in eine Pipe schreiben lassen und die mit Perl auslesen.
Das geht so: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 # Variable enthält Kommandozeile des zu startenden Programms mit Parametern my $callprogram = 'dpkg --print-architecture'; # Programm schriebt auf Pipe und diese wird per Dateinhandle geöffnet open my $fh, "$callprogram|" or die "Fehler: Pipe öffnet nicht '$!'"; # die Ausgabezeilen der Pipe auslesen my @lines = <$fh>; # Lesen aus der Pipe schließen close $fh or die $!; # und nun kannst du über @lines deine Ausgabe verarbeiten. Oder mit qx//. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 my $callprogram = 'dpkg --print-architecture'; my $response = qx/$callprogram/; # Programm aufrufen und Ausgabe in Variable einlesen # Prüfe ob Fehler nach Aufruf vorliegt if ($? == -1) { print "Kann nicht ausgefuehrt werden: $!\n"; } elsif ($? & 127) { printf "Kindprozess endete - Signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'mit' : 'ohne'; } else { printf "Kindprozess endete mit Rueckgabewert %d\n", $? >> 8; } //EDIT: In den Perldocs zu open ist zu lesen, dass die Benutzung des Modus -| bei einer pipe angebracht ist falls mehr als ein Argument verwendet wird: Quote Editiert von GwenDragon: Zitat für open-Modus mit Pipe Hinzugefügt Last edited: 2019-10-12 15:13:18 +0200 (CEST) |