GetOptions - Erstes Argument auslesen?
Chrisi
- perl
Hi zusammen,
ich habe mir ein kleines Perlscript gebaut das ueber die Kommandozeile die Agrumente mit GetOptions ausliest.
Das klappt alles ganz gut, nur fehlt mir eine Option um das erste Argument zu ermitteln:
script arg1 -opt1=123 -opt2=456
Das erste Argument soll immer die Aktion enthalten, alles was dannach kommt sind die die Schalter die GetOptions auslesen soll.
Hat hier jemand einen Tipp wie ich es hinbekomme?
Danke & Grüße, Chrisi
Du kannst deinen Text aufteilen.
Dein Trennzeichen ist das Leerzeichen.
Geht mit der Funktion split:
http://tutor.hsz-t.ch/tutorials/perl-tutorial/split.html
Moin Moin!
Du kannst deinen Text aufteilen.
Dein Trennzeichen ist das Leerzeichen.
Geht mit der Funktion split:
http://tutor.hsz-t.ch/tutorials/perl-tutorial/split.html
Du arbeitest zu viel mit DOS und Windows. Perl ist ein Unix-Kind, das erwartet seine Kommandozeilenparameter säuberlich vom Aufrufer in ein Array aufgeteilt vorgesetzt zu bekommen. Unter DOS und Windows macht das die C RTL halbwegs transparent noch vor dem Aufruf von main(), so dass Perl sich nie mit dem Parsen der Original-Kommandozeile herumschlagen muß.
Der etwas krude Name @ARGV kommt übrigens genau von dort: main() ist typischerweise als int main(int argc, char ** argv) deklariert, soll heißen: main bekommt einen Integer-Parameter argc "Argument Count" und einen Zeiger auf Character-Zeiger (C's Idee eines Array of String) argv "Argument Vector". Perls @ARGV ist exakt das, was main() als argv übergeben bekam, jedoch ist das erste Element, der Programmname, in $0 abgelegt. argc wird nicht explizit an Perl übergeben, denn Perl schleppt im Gegensatz zu C im Array immer dessen Länge mit.
Perl6 löst sich ein wenig mehr von C und nennt die Kommandozeilenparameter deutlich offensichtlicher @ARGS.
Alexander
hi,
Das klappt alles ganz gut, nur fehlt mir eine Option um das erste Argument zu ermitteln:
Grad ebend mal nachgelesen:
Usually programs take command line options as well as other arguments, for example, file names. It is good practice to always specify the options first, and the other arguments last. Getopt::Long will, however, allow the options and arguments to be mixed and 'filter out' all the options before passing the rest of the arguments to the program. <<
Ergo: Erst die Opts, dann die restlichen Argumente.
Hotte
Hi zusammen,
danke für eure Antworten.
Man ist ja auch immer ein bischen blöde :-) Aber bei manchen Sachen hat man halt eine Blockade mit der man sich dann mal ein paar Stunden beschäftigen kann.
Ich habe es jetzt so gelöst das ich zuerst ARGV[0] auslese und prüfe, dann fange ich an die gültigen Optionen zu Parsen.
So einfach, aber doch so schwer *g* ...
Danke und Viele Grüße, Chrisi
hi,
Ich habe es jetzt so gelöst das ich zuerst ARGV[0] auslese und prüfe, dann fange ich an die gültigen Optionen zu Parsen.
Naja, ich mache das genau umgekehrt: Erst die Schalter durch einen Switch oder eine Kontrollstruktur jagen, weil, das muss ich sowieso machen. Und wenn ich da durch bin, weiß ich auch, an welcher Stelle in @ARGV noch was kommen könnte ;-)
Hotti