Frage zu subroutinen
Mark
- perl
hi,
alle subroutinen fangen mit meinShop an.
jetzt möcht ich aber nicht die subroutinen einzeln aufrufen.
irgendwie kann ich mich nicht so richtig ausdrücken
hier ist ein beispiel:
@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(); |
|} |
+--------------------------------------+
------------------
foreach(@var) {
meinShop$_(); so wäre es mir lieber kann man das irgendwie machen
}
------------------
sub meinShopWarenkorb {
print "";
}
sub meinShopRechnung {
print "";
}
danke im voraus
Привет Mark.
alle subroutinen fangen mit meinShop an.
jetzt möcht ich aber nicht die subroutinen einzeln aufrufen.
Dieser Thread sollte dir helfen:
http://forum.de.selfhtml.org/archiv/2004/1/t70607/
Дружба!
Siechfred
hallo Mark,
alle subroutinen fangen mit meinShop an.
Nö. Bei mir tut das keine einzige ;-)
irgendwie kann ich mich nicht so richtig ausdrücken
Das scheint mir auch so. Ich kann dich irgendwie auch nicht so richtig verstehen.
hier ist ein beispiel:
@var = ("Warenkorb","Rechnung"); auszug aus datenbank
Ein Beispiel wofür? Jedenfalls ist das keine Subroutine, und was da passieren soll, ist sehr ungewiß.
foreach(@var) {
meinShop$_(); so wäre es mir lieber kann man das irgendwie machen
}
öhm ... ja. Man kann _das_ wahrscheinlich auch irgendwie machen. Du solltest dich mal mit den Variablen, Konstanten, Arrays und ähnlichem Kram in Perl beschäftigen. $_ ist im übrigen eine vordefinierte Variable, die man nicht einfach so mit einer anderen Zeichenfolge zusammenklatschen darf.
sub meinShopWarenkorb {
print "";
}
Das wäre dann zwar eine Subroutine, aber sie tut nichts, bis auf die Ausgabe von "nichts"
sub meinShopRechnung {
print "";
}
Auch das wäre eine Subroutine, die dir "nichts" auf den Bildschirm pinselt. Wozu hast du dir denn vorher so viel Mühe gegeben, einen Array @var zu erfinden, wenn er jetzt nicht genutzt werden soll?
Irgendwie scheinen dir die Grundbegriffe nicht ganz klar zu sein. Dabei gibts doch in SELFHTML ein ganz aufschlußreiches Kapitel über Perl. Mit dem, was du jetzt hier so als Schnipselchen hast kucken lassen, läßtsich jedenfalls erstmal günstigenfalls gar nix anfangen, im ungünstigeren Fall kannst du dir eine Menge hängende Prozesse einfangen. Versuche mal, deine Frage etwas genauer zu formulieren, dann kannst du vielleicht auch geholfen werden.
Grüße aus Berlin
Christoph S.
Привет Christoph.
$_ ist im übrigen eine vordefinierte Variable, die man nicht einfach so mit einer anderen Zeichenfolge zusammenklatschen darf.
Na, aber sicher doch:
sub foo {
my $str = "bar: ".$_;
return $str;
}
sub meinShopWarenkorb {
print "";
}
Das wäre dann zwar eine Subroutine, aber sie tut nichts, bis auf die Ausgabe von "nichts"
Nana, ein Leerstring ist nicht nichts ;)
Дружба!
Siechfred
hi,
$_ ist im übrigen eine vordefinierte Variable, die man nicht einfach so mit einer anderen Zeichenfolge zusammenklatschen darf.
Na, aber sicher doch:
sub foo {
my $str = "bar: ".$_;
return $str;
}
Du schummelst! Du definierst eine neue Variable, und die setzt du ordnungsgemäß aus verschiedenen Bestandteilen zusammen, darunter auch $_, und alles hübsch mit . verbunden. Neeeee, das giltet nicht. Erkläre bitte, daß "$str$_" in genau dieser Schreibweise erlaubt ist und etwas Sinnvolles liefert, dann leiste ich Abbitte.
sub meinShopWarenkorb {
print "";
}
Das wäre dann zwar eine Subroutine, aber sie tut nichts, bis auf die Ausgabe von "nichts"
Nana, ein Leerstring ist nicht nichts ;)
Das ist ein Philosophem. Inwiefern ist etwas "Leeres" nun ein apostrophiertes Nichts, oder ist ein Nichts etwas Leeres? Ich finde auf die Schnelle weder bei Schopenhauer noch bei G.W.F.Hegel eine stichhaltige Erläuterung dazu. Anzeigetechnisch ist es wurscht: egal, ob das "Nichts" nun auch noch "leer" ist oder ob da etwas Leeres, das nicht nichts ist, angegeben wurde - auf dem Bildschirm erscheint jedenfalls ein leeres Nichts, also gar nichts. Das ist aber offensichtlich nicht gewollt. Also muß man die Leere mit einem Nichts auffüllen, das Inhalt hat - sollte ja logisch sein, oder?
Hm.
Wenn ein "Nichts" jetzt aber Inhalt bekommt, ist es ja nicht mehr leer. Und dann ist es auch nicht mehr "nichts". Verzwickte Logik aber auch, das kann wohl bloß Mr. Spock lösen ...
Grüße aus Berlin
Christoph S.
ha!
Erkläre bitte, daß "$str$_" in genau dieser Schreibweise erlaubt ist und etwas Sinnvolles liefert, dann leiste ich Abbitte.
Ich habs doch gewußt: ich kann gar nicht anders als es richtig anzugeben, "$str$_" _kann_ selbstverständlich einen sinnvollen Wert enthalten und/oder ausliefern. Im Beispiel des OP steht aber "str$_()", und das macht den Unterschied, auf den ich aufmerksam machen wollte
Grüße aus Berlin
Christoph S.
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