Thread dynamische bedingungsprüfung (8 answers)
Opened by jan999 at 2010-07-30 18:18

topeg
 2010-07-30 23:45
#140182 #140182
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Eine DispatchTabelle die zu einem "Befehl"
# (hier sind es Vergleichsoperationen) eine Funktion bestimmt,
# die ausgeführt werden soll.
# jede Funktion hat zwei übergebene Parameter (in @_),
# die logisch miteinander verknüpft werden.
# Das Ergebnis wird zurück geliefert.
# hier als Beispiele sind "numerisch Kleiner" (<)
# und "numerisch Größer" (>) implementiert
my %map = (
    ">" => sub { return $_[0] > $_[1] },
    "<" => sub { return $_[0] < $_[1] },
    # ...
);

# Beispielwerte
my $value = 23;
my $compare = 24;
my $condition = "<";

# Hier wird die unten definierte Funktion "test"
# mit den vordefinierten Werten ausgeführt.
print test($value, $condition, $compare);

sub test {
    # Die funktion "test" übernimmt drei Werte
    my ($value, $cond, $compare) = @_;

    # $cond ist der oben übergebene Wert aus "$condition"
    # der Beispielhaft mit "<" belegt wurde.

    # Es wird geprüft ob "$cond" als Schlüssel im Hash "$map"
    # (die DispatchTabelle) einen wert hat
    # und dieser wird der Variable "$func" übergeben.
    # wenn es kein wahrer Wert ist,
    # stirbt das Script mit "die".
    # (Eine funktions-referenz ist wahr "undef" ist es nicht)
    my $func = $map{$cond} or die "No function for $cond";

    # die Funktion wird mit den übergebenen Werten "$value" und "$compare" ausgeführt
    # und das Ergebnis zurück geliefert.
    return $func->($value, $compare) ? "true" : "false";
}

View full thread dynamische bedingungsprüfung