Thread use feature "switch"; for or given. (1 answers)
Opened by mika at 2016-06-12 08:26

Gast wer
 2016-06-12 22:58
#184937 #184937
das mit dem "for" funktioniert weil $_ dabei gefüllt wird.

"given", "when", "default" ist etwas in der Art:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sub given($&) {
  ($_,$code) = @_;
  {
    local $match = 0;
    $code->();
  }
}

sub when($&) {
  my ($test,$code) = @_;
  if(/$test/) {
    $code->() ;
    $match=1;
  }
}

sub default(&) {
  my ($code) = @_;
  $code->() unless($match):
}



Ein bisschen mehr steht bei "when" schon dahinter weil man nicht nur Regex benutzen kann und man es wie ein "if" oder "for" Verwenden kann. Aber das sind die Grundzüge.

Wenn ich mich richtig erinnere machten die das früher durch einen Parser, der während der Parser-Zeit im Perl-Compiler "given", "when" und "default" durch etwas in der Art ersetzen:

when( ... ){ ... } => when( ... , sub{ ... });
default{ ... } => default(sub{ ... });
given(...){ ... } => for(...){ local $match=0; ... });

Dieses verändern des Code bevor er von Perl geparst wird hat in der Vergangenheit immer wieder Probleme bereitet.
Mittlerweile wurden die Funktionen fest in Perl integriert.
Last edited: 2016-06-13 09:29:04 +0200 (CEST)

View full thread use feature "switch"; for or given.