| Perl-Basics | Perl-Enhanced | ||
|---|---|---|---|
Tips und Tricks zu Perl
Übergabeparameter
Wenn man die vorgefertigten Module zum Auslesen von Übergabeparametern nicht verwenden will oder kann, kann man sich selbst eine kleine Sub schreiben, die das fuer einen erledigt.
Bei einem Parameterformat von: perl myScript.pl -key1=value1 -key2=value2 -key3 -key4=value4 koennte das folgendermassen aussehen:
my $p = &ReadParams();
foreach (sort keys %$p){
print ("$_ => $p->{$_}\n");
}
sub ReadParams {
my %p = (); # Dieser Hash soll die ganzen Parameter aufnehmen
my @neededParameters = qw(-key1 -key2 -key3);
my @optionalParameters = qw(-key4 -key5);
my @paramsWithValue = qw(-key1 -key2 -key4);
foreach my $pair ( @ARGV ){
my ($key, @vals) = split(/=/, $pair, 2); # das 2 ist z.B. fuer -c=a=20 da
if ( exists $p{ lc($key) } ){ # falls der Schluessel schon existiert
$p{lc ($key) } .= ";" . join("=", @values); # haenge Wert an alten Wert an
}
else {
$p{ lc($key) } = join("=", @values);
}
# check if parameter is allowed
unless (grep { lc ($_) eq lc($key) } (@neededParameters, @optionalParameters) ){
die "ERROR: unknown parameter: $key\n";
}
} # foreach
# check if all needed parameters are here
foreach (@neededParameters){
exists $p{$_} or die ("ERROR: parameter $_ is missing\n");
}
# check if all parameters from @paramsWithValue have defined values
foreach (@paramsWithValue){
exists ( $p{$_} ) or next; # skip parameter if not existing
defined( $p{$_} ) or die "ERROR: parameter $_ has no value\n";
}
return \%p;
} # ReadParams
Dieser Code ist nur ein sehr einfaches Beispiel; wenn man Parameter parsen will, sollte man besser die Perl-Modulgruppe GetOpt::* verwenden, so z.B. GetOpt::Long
Letztes Update dieser Seite: Tuesday, 27-Jun-2006 20:37:00 CEST