[Ruhr-pm] Perl

Veit Wahlich veit at ruhr.pm.org
Do Sep 10 06:28:15 PDT 2009


Am Donnerstag, den 10.09.2009, 15:03 +0200 schrieb Brian Morks:
> Bezüglich eurer Fragen:
> - Die Parameterübergabe ist denke ich mal über die Kommandozeile, muss ich das dann einfach mit zwei Bindestrichen einleiten oder?

Nicht unbedingt, "--" in Uebergaben wie "programm parameter0 --
parameter1 parameter2" werden meist nur als Trennzeichen verwendet, z.B.
um Parameter fuer ein Programm selbst sowie fuer ein von diesem Programm
gestartetes oder interpretiertes weiteres Programm zu trennen.
Beispielsweise kannst Du damit SSH mitteilen, welche Parameter fuer den
SSH-Client und welche fuer die vom SSH-Client gestartete entfernte Shell
gedacht sind.

> - Die Ergebnisse der Exe sehen z.B.  so aus: 21.341 1.000 5.391 Wobei nur die 21.341 verglichen werden sollte

Klingt fuer mich nach Ausgabe auf stdout. In diesem Fall wuerdest Du am
Einfachsten den open-Befehl wie von Renee beschrieben verwenden, eine
Zeile einlesen, das Filehandle von stdout des Programms schlieszen und
die Ausgabe dann z.B. mit split oder einem Regex zerlegen.

Beispiel:

# Eingabe-Parameter deklarieren und festlegen:
my($param1, $param2) = (123, 456);
# Spaeter verwendete Variablen deklarieren -- Execution-Handle, Zeile und Ergebnis:
my($xh, $line, $result);

# Programm mit Parametern starten und zum Lesen seiner Ausgaben oeffnen, bei Erfolg...
if(open($xh, '-|', '/pfad/programm.exe \'' . $param1 . '\' \'' . $param2 . '\'')){
  # ... erste Zeile einlesen, ...
  $line = readline($xh);
  # ... alle Zeichen bis zum ersten Leerzeichen in $result laden...
  ($result) = ($line =~ /^\S+/);
  # ... und Programm schlieszen.
  close($xh);
}
# Bei Fehler...
else{
  # ... Fehlermeldung ausgeben.
  printf("Fehler beim Ausfuehren: %s\n", $!);
}

Hier wird jetzt das Programm /pfad/programm.exe mit den in $param1 und
$param2 festgelegten Werten aufgerufen, die etwas umstaendliche
Kapselung der Parameter in '' beim Aufruf habe ich jetzt nur zur
Sicherheit gemacht, weil ich nicht sicher bin, welche Zeichen die
Parameter wirklich enthalten -- wirklich sicher ist das auch nicht, da
muesste man dann erst noch auf Zeichen filtern. Das laesst sich also
wahrscheinlich im konkreten Fall auch noch vereinfachen.
Das Ergebnis wird schliesslich in $result gespeichert, und zwar alle
Zeichen der ersten Zeile der Ausgabe des Programms vor dem ersten
Leerzeichen.

> - Cygwin wurde mir vom Unibetreuer empfohlen, muss natürlich nichts heißen.

Cygwin ist an der Uni Essen sehr beliebt, das kenne ich auch noch von
frueher... Meist eingesetzt von Informatikern, die genoetigt werden, mit
Windows zu arbeiten, um an eine anstaendige Shell zu gelangen. ;)

Gruesze,
// Veit



Mehr Informationen über die Mailingliste Ruhr-pm