Thread Funktionsaufruf - aber nicht alle Parameter fortlaufend übergeben (6 answers)
Opened by jan99 at 2014-02-05 11:23

clms
 2014-02-05 13:09
#173388 #173388
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2014-02-05T11:00:53 Muffi
Die einfachste Möglichkeit ist erstmal $css als undef zu übergeben.

//edit: wenn das nicht praktikabel ist, z.B. weil zu viele optionale Params, dann nimmt man normalerweise einen Hash.
Code (perl): (dl )
1
2
3
4
5
6
7
foo($pflicht1, $pflicht2, { opt1 => 123, opt3 => 456});

Sub foo {
  my $pflicht1 = shift;
  my $pflicht2 = shift;
  my $opt = shift; # hashref
}

Ein anderes gebräuchliches Pattern ist es, statt dem Hash-Ref quasi den Inhalt des Hashs am Ende des Funktionsaufrufs zu übergeben:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
foo($pflicht1, $pflicht2, opt1 => 123, opt3 => 456);

sub foo {
  my $pflicht1 = shift;
  my $pflicht2 = shift;
  my %opt = ( opt1 => "Default_für_opt1",
              opt2 => "default-opt2",
              @_); 

  say $opt{opt1}; # 123
  say $opt{opt2}; # default-opt2
}

Wie Du siehst kann man mit diesem Muster sehr elegant in der Funktion Defaultwerte für die Parameter spezifizieren. Wenn der Parameter im Funktionsaufruf gesetzt wird, wird der Default überschrieben.

View full thread Funktionsaufruf - aber nicht alle Parameter fortlaufend übergeben