Tutorial : Perl : Schalter und Parameter per Getopt::Std
      
Shopsoftware Shopsystem
  Home     Download     News     Kontakt     Impressum     Sitemap  

Demo-Version   
Häufige Fragen   
Module und Preise   
Wie bestellen   
Support   
AnfrageAnfrage   
TutorialsTutorials
Partnerprogramm   
Über interaktiv.net   
Leistungen   
Referenzen   
Sie sind hier  :  Startseite Support Tutorials
Perl : Schalter und Parameter per Getopt::Std


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

perl script.pl -a Erwin

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."
interAKTIVnet GmbH
Otto-Lilienthal-Str. 36
71034 Böblingen
Tel. 07031-714740
Fax 07031-714744
info@interaktiv.net