Sinn und Zweck dieses Artikels
Erstes Beispiel zu "getopts"
"getopt" und der Unterschied zu "getopts"
Weitere Möglichkeiten
Sinn und Zweck dieses Artikels
Of besteht die Aufgabe Parameter an ein Script per Kommandozeile
zu übergeben. Seien es Parameter zum Testen oder Parameter welche
bestimmte Features eines Scripts verwirklichen - alle Parameter finden
sich in @ARGV und müssen entsprechend aufgearbeitet werden.
Ein Modul was Ihnen genau diese Arbeit abnimmt gehört zum
Lieferumfang einer jeden PERL 5 Distribution: Getopt::Std.
Erstes Beispiel zu "getopts"
Einmal angenommen es wird ein Script benötigt zu welchen optional ein Schalter mit einem bool'schen Wert und ein Schalter mit einem bestimmten Literal angegeben werden sollen. Die Aufgabenstellung sei beispielsweise diese:
- Schalter -s gesetzt soll heißen: Speichern,
- Mit Schalter -n soll es möglich sein der zu speichernden Datei einen Namen zu geben.
Der Quellcode unter Verwendung des Moduls Getopt::Std; ist ganz einfach was die Auswertung der Schalter betrifft:
use Getopt::Std;
getopts('sn:') or die "Ungueltige Option!\n";
$opt_s and print "Option s ist gesetzt auf $opt_s\n";
$opt_n and print "Parameter n hat den Wert $opt_n\n";
|
Beschreibung
Im Argument der Methode getopts werden die Schalter definiert welche beim Aufruf des Scripts als Parameter gesetzt werden können. Schalter s ist dabei ein bool'scher Wert und der Schalter n verlangt nach einem Wert (das macht der Doppelpunkt).
Gleichzeitig werden die Variablen $opt_s und $opt_n ins Leben gerufen.
Ein Aufruf des Scripts ergibt also je nach Schalter die folgenden Ergebnisse:
perl script.pl -s
-> Option s ist gesetzt auf 1
perl script.pl -n myname
-> Parameter n hat den Wert myname
|
Soll die Abfrage der Optionen im Script paarweise (key - value) erfolgen, so kann die Methode getopts wie folgt verwendet werden:
use Getopt::Std;
getopts('sn:', \%opts) or die "Ungueltige Option!";
while (($key,$value) = each %opts) {
print "$key = $value\n";
}
|
Beschreibung
Auch in diesem Fall werden im Argument der Methode getopts die beim Scriptaufruf zu verwendenden Schalter deklariert. Hinzugekommen ist die Deklaration des hashes %opts welcher zur Auswertung der als Parameter eingegebenen Schalter wie im obigen Beispiel verwendet werden kann.
"getopt" und der Unterschied zu "getopts"
Der wesentliche Unterschied besteht darin dass die im Argument der Methode getopt deklarierten Schalter stets nach einem Wert verlangen. Schauen wir uns dazu einmal ein weiteres Beispiel an:
use Getopt::Std;
getopt('a');
$opt_a and print "Option a ist gesetzt auf $opt_a\n";;
|
Ein Aufruf dieses Scripts mit dem Schalter -a gefolgt von einem Wert
ergibt also die folgende Ausgabe:
|
Option a ist gesetzt auf Erwin
|
Ähnlich wie mit getopts im Argument ein Hash definiert werden kann, ist dies auch im Argument der Funktion getopt möglich:
getopt('abc',\%opts);
foreach $key(keys %opts){
print "$key = $opts{$key}\n";
}
Aufruf:
perl script.pl -a Erwin
Ergebnis:
a = Erwin
|
Weitere Möglichkeiten
Das Modul Getopt::Long bietet analog zu Getopt::Std wie
der Name bereits vermuten lässt erweiterte Möglichkeiten.
Aus der Perl-Dokumentation:
"The Getopt::Long module implements an extended getopt function called
GetOptions(). This function adheres to the POSIX syntax for command line
options, with GNU extensions. In general, this means that options have
long names instead of single letters, and are introduced with a double
dash "--" [u.s.w.]"
Auf gut deutsch:
"Das Getopt::Long Modul implementiert in GetOptions() erweiterte
Funktionen gegenüber getopt(). Diese Funktion hält fest
am POSIX Syntax und an den GNU Erweiterungen. Das bedeutet hauptsächlich
dass lange Namen anstelle einzelner Buchstaben verwendet werden können
welche mit einem doppelten Anstrich "--" eingeleitet werden."
|