Hier möchte ich zusammentragen, wie die übernahme von Parametern in der Konsole in verschiedenen Programmiersprachen funktioniert.
Perl hat ein Motto, dem es Folgt. Dieses besagt, dass mann alles immer auf mehr als nur einen Weg bewerkstelligen kann. Deshalb möchte ich auch hier verschiedenen Möglichkeiten der Parameterübernahme presentieren.
Als erstes habe ich ein Script geschrieben, dass sämmtliche Parameter durchgeht, Option und Wert gruppiert und dann an ein Hash mit Optionsnamen als Schlüssel und dessen Wert als den übergebenen Wert bzw. den Wert 1, wenn die Option für sich allein steht.
#!/usr/bin/perl -w my @pamList; my %options; # Parameter und Werte zuordnen while (my $word = shift @ARGV){ #print "word>$word<\n"; if ($word=~ /^-[^-]/){ #beginnt mit einem Bindestrich also ShortParameter my @gPam=split(/=/,$word); my $l_gPam = length($gPam[0]); if ($l_gPam >2){ # wenn mehr als nur ein Zeichen hinter dem Minus push @pamList ,substr($gPam[0],1,1); for ($i=2;$i<$l_gPam;$i++){ my $addPam=substr($gPam[0],$i,1); push @pamList , $addPam; } }else{ #print ">$gPam[0]<\n"; push @pamList, $gPam[0]; } $pamList[-1].=" $gPam[1]" if($gPam[1]); }elsif ($word=~ /^-{2,}/){# beginnt mit mindestens 2 Bindestrichen also LongParameter push @pamList, $word; }elsif($word eq '-'){ # hier ist zwischen dem Bindestrich und dem Parameternamen ein Leerzeichen gerutscht push @pamList, $word; } elsif(@pamList){ # gehört zum letzten Parameter $pamList[-1].=" $word"; } else{ # ist ein Wert als Parameter push @pamList, $word; } } foreach my $eintrag(@pamList){ #print "Eintrag>$eintrag<\n"; $eintrag=~s/^-{1,2}\s?//; # löschen aller -Zeichen und eventuell folgender Leerzeichen $eintrag=~s/\s/=/;#ersetzen des ersten verbleibenden Leerzeichens durch ein =-Zeichen my @setValue=split(/=/,$eintrag); # Splitten am gerade gestezten Gleichheitszeichen $options{$setValue[0]}=$setValue[1] || !defined $setValue[1]; # und den ersten Wert als Schlüssel den zweiten bzw. wenn nicht vorhanden 1 als Wert übergeben } #den kompletten Hash ausgeben while ( my ($option, $value) = each(%options) ) { print "$option => $value\n"; }