# 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"; }