Helmut Weber: Frage zu subroutinen

Beitrag lesen

Hallo Mark,

@var = ("Warenkorb","Rechnung");  auszug aus datenbank

+--------------------------------------+
|if($var[0] eq "Warenkorb") {          |
|meinShopWarenkorb();                  |
|}                                     |
|                                      | so möchte ich es nicht machen
|if($var[1] eq "Rechnung") {           |
|meinShopRechnung();                   |
|}                                     |
+--------------------------------------+

Du möchtest also abhängig vom Inhalt einer Variable in ein entsprechendes Unterprogramm springen. Wie Du richtig erkannt hast, ist eine merhfache IF-Abfrage kein schöner Stil, und auch nicht sehr Wartungsfreundlich.In manchen Programmiersprachen hilft hier eine SWITCH/CASE-Anweisung, die in Perl allerdings nicht unterstützt wird.

Du kannst aber in Perl mittels einer Hash-Variable, in der Referenzen zu Unterprogrammen hinterlegt sind, wunderbar diesen Zweck erfüllen:

my $var = "Rechnung"; # Der entsprechende Wert aus der DB

my %subroutine = (
  'Warenkorb'  => &New,
  'Rechnung'   => &Edit,
  ...
);

if ( $subroutine{$var} ) { $subroutine{$var}->() }
else { StandardRoutine() }

Gruß
Helmut Weber

--
-------------------------------------------
Mode ist eine Variable, Stil eine Konstante