Software-Engineering Martin Fabiani

Sitemap (Navigation ohne JavaScript)

Impressum: Martin Fabiani, Röderbergweg 104, D-60485 Frankfurt, Tel: +49 (69) 49084808, E-Mail: info (at) fabiani.net, USt-IdNr: DE217298609

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