Thread Parameterübergabe mittels system("abc.pl", "arg") (22 answers)
Opened by Oliver at 2014-08-28 13:42

murphy
 2014-08-29 12:59
#177040 #177040
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Neben in diesem Thread bereits erwähnten Dingen fällt mir dazu spontan noch folgendes ein:

CPAN:CGI versucht zu erkennen, ob es von der Kommandozeile aus aufgerufen wurde oder von einem Webserver. Diese Heuristik richtet sich danach, ob gewisse Umgebungsvariablen gesetzt sind. Die Kommandozeilenargumente werden nur ausgewertet, wenn diese CGI-Umgebungsvariablen nicht gesetzt sind.

Wenn man nun aus einem CGI-Skript ein anderes per system aufruft, dann sind diese Umgebungsvariablen immer noch gesetzt. Daher wird das zweite Skript die per system übergebenen Kommandozeilenargumente ignorieren und versuchen erneut die vom Webserver übergebenen Daten zu verwenden, was im Falle von POST-Daten garantiert schief gehen wird und im Falle von URL-Parametern vermutlich nicht zum gewünschten Ergebnis führt.

Eine unsaubere Lösung wäre, das zweite Skript via fork und exec auszuführen und zwischen diesen Aufrufen %ENV entsprechend anzupassen.

Eine saubere Lösung wäre, die Funktionalität vernünftig in Module zu kapseln und diese per use oder require einzubinden anstatt externe Skripte per system aufzurufen.
When C++ is your hammer, every problem looks like your thumb.

View full thread Parameterübergabe mittels system("abc.pl", "arg")