|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Argumentübergabe auf der kommandozeile
|
Seitenanfang |
| Hab da ein problem mit der Argumentübergabe auf der kommandozeile in meimem programm gibt es einige kommandozeilenargumente wie z.B. -o | --output auf welches eine pfad angabe folgt. wie kann ich jetz auf diesen pfad zugreifen wenn ich die option -o finde. Meine idee war : foreach (@ARGV) { $index++; debug("gp: $index => $_"); if(/^-o$/ || /^--output$/) { $index++; # go to the next argument debug("gp: $index; $ARGV[$index]"); if($ARGV[$index] eq /^-.*/) { erroranddie("No File Path is given.", 1); }else{ $answer= $ARGV[$index]; splice(@ARGV, $index, 1); } } aber irgendwie funktioniert das ganze nicht richtig. Ich weis nur nicht warum
Datum: 25.08.2008-09:19

|
re: Argumentübergabe auf der kommandozeile
|
Seitenanfang |
| Hallo! >>if($ARGV[$index] eq /^-.*/) { Ein RA wird mit dem Operator =~, nicht mit eq auf einen String angewendet. Eine noch bessere Lösung ist es aber, den ganzen Quellcode zu löschen und stattdessen eines von vielen CPAN-Modulen speziell für diese Aufgabe zu nehmen. Getopt::OO (http://search.cpan.org/~sjsmith/Getopt-OO-0.07/lib/Getopt/OO.pm) sieht z.B. vielversprechend aus. Grüße, Skrilax
Datum: 25.08.2008-18:38

|
re: Argumentübergabe auf der kommandozeile
|
Seitenanfang |
| Danke hab meinen fehler schon gefunden. Mit den ganzen perl modulen bin ich leider nicht so vertraut und desshalb auf gar nicht erst auf die idee gekommen, dass es dafür eines gibt. Klingt aber verlockend, mal sehen ob ich des nachträglich einfüge. lg franzi
Datum: 26.08.2008-07:56

|
re: Argumentübergabe auf der kommandozeile
|
Seitenanfang |
Getopt::Std und Getopt::Long sind Standardmodule fuer diese Aufgabe
#!/usr/bin/perluse strict; use warnings; # Vorbelegung der Optionen my %options = ( "output-file" => "out.file", "title" => "Untitled", ); GetOptions(\%options, "output-file|output|o=s", "title|t=s", "verbose|v", "debug|d+", );
Das ist nur eine Anwendungsmoeglichkeit von Getopt::Long, die Optionen werden in einem Hash (%options) gespeichert, dafuer uebergibt man GetOptions() als erstes Argument eine Hashreferenz, alle folgenden Argumente beschreiben die Optionen. Der Aufbau ist "<Optionsname> = <Optionstyp>", beim Optionsnamen koennen Alternativnamen angegeben werden (getrennt durch '|'), wie bei "output-file|output|o" so kann man --output-file, --output oder -o verwenden, der Wert wird im Hash mit dem ersten Namen als Schluesselnamen gespeichert, hier $options{'output-file'}. Der Optionstyp (die Angabe hinter dem Ist-Gleich), gibt an welchen Wert die Option erwartet, fehlt die Angabe, wie z.Bsp. bei "verbose", ist es ein boolischer Wert, die Angabe von --verbose oder -v auf der Kommandozeile setzt $options{'verbose'} auf 1 (boolisch wahr). Der Optionstyp "s" wie bei "output-file|output|o=s" erwartet einen String, "i" einen Integer, und so weiter.Statt einen Hash kann man auch einzelne Variablen verwenden
GetOptions( "output-file|output|o=s" => \$output-file, "verbose|v" => \$verbose, # ... );
ich hab die Optionen jedoch lieber gesammelt in einen Hash, das macht die Sache einfacher.
Datum: 26.08.2008-13:02

|
|

|

|

|
 |

|

|
|