Thread Stringvergleich geht nicht.. (18 answers)
Opened by introdev at 2019-10-07 17:36

GwenDragon
 2019-10-12 10:26
#190693 #190693
User since
2005-01-17
14577 Artikel
Admin1
[Homepage]
user image
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
For three or more arguments if MODE is |- , the filename is interpreted as a command to which output is to be piped, and if MODE is -| , the filename is interpreted as a command that pipes output to us. In the two-argument (and one-argument) form, one should replace dash (- ) with the command.


Editiert von GwenDragon: Zitat für open-Modus mit Pipe Hinzugefügt
Last edited: 2019-10-12 15:13:18 +0200 (CEST)
die Drachin Gwendolyn

View full thread Stringvergleich geht nicht..