Thread Kommandozeilenparameter übergeben
(43 answers)
Opened by franc at 2011-01-17 16:34
Das mit dem '$' vs. '@' hat sich ja jetzt aufgeklärt, deshalb hier ein paar Varianten.
Deine erste Form Code (perl): (dl
)
1 2 3 4 my $map_type = $ARGV[0]; my $map_zoom = $ARGV[1]; my $top_left = $ARGV[2]; my $bottom_right = $ARGV[3]; Die Variante mit shift hat den Vorteil, dass man nicht zählen muss: Code (perl): (dl
)
1 2 3 4 my $map_type = shift @ARGV; my $map_zoom = shift @ARGV; my $top_left = shift @ARGV; my $bottom_right = shift @ARGV; Man kann das Ganze auch etwas verkürzen. Ob es übersichtlicher ist, das ist Ansichtssache. Hängt vielleicht auch von der Formatierung ab: Code (perl): (dl
)
my ($map_type, $map_zoom, $top_left, $bottom_right) = @ARGV; Die ganz vornehme Art, Kommandozeilenparameter auszuwerten, ist natürlich die mit benannten Parametern. Die Kommandozeile sähe dann beispielsweise so aus: Code: (dl
)
perl myprog --type bla --zoom 2 --top-left 0,0 --bottom-right 1280,1024 Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 use Getopt::Long; # Variablen deklarieren my ($map_type, $map_zoom, $top_left, $bottom_right); GetOptions( 'type=s' => \$map_type, 'zoom=i' => \$map_zoom, 'top-left:s' => \$top_left, 'bottom-right:s' => \$bottom_right, ) or die "Usage: ..."; Hier werden automatisch den Variablen die entsprechenden Werte zugewiesen. Man kann auch ein wenig den erwarteten Parametertyp oder optionale Parameter festlegen. In diesem Fall ist --type ein erforderlicher Parameter und vom Typ String (type=s), --zoom auch erforderlich und vom Typ Integer (zoom=i), während --top-left und --bottom-right optional und vom Typ String sind (:s). Im Fehlerfall wird eine Meldung ausgegeben und GetOptions() gibt false zurück. Statt die Werte skalaren Variablen zuzuweisen, kann man auch Arrays, Hashes und Referenzen nehmen oder eine Subroutine mit dem jeweiligen Wert aufrufen. Getopt::Long bietet da noch einiges. |