subroutine in subroutine ausführen?
nadin
- perl
hi,
ich wollt mal fragen ob es erlaubt ist eine subroutine in einer gerade laufenden subroutine zu starten.
wenn ja, wo muss die subroutine, die gestartet wird stehen. im programm oder in der laufenden subroutine.
danke im voraus
Hallo,
ich wollt mal fragen ob es erlaubt ist eine subroutine in einer gerade laufenden subroutine zu starten.
Ui, da ist ja jemand übervorsichtig;-)
Natürlich kann man in Perl Sub-Routinen aus anderen aufrufen. Auch rekursive Aufrufe, also in sich verschachtelte Aufrufe sind erlaubt. ein simples ausprobieren hätte da schon Gewissheit gebracht.
wenn ja, wo muss die subroutine, die gestartet wird stehen. im programm oder in der laufenden subroutine.
_Das_ findest Du in der dazugehörigen Dokumentation (perldoc perlsub).
Grüße
Klaus
»» Natürlich kann man in Perl Sub-Routinen aus anderen aufrufen. Auch rekursive Aufrufe, also in sich verschachtelte Aufrufe sind erlaubt. ein simples ausprobieren hätte da schon Gewissheit gebracht.
hi, man kann auch eine exit anweisung in eine subroutine schreiben und es funktioniert, aber es ist kein schöner programmierstil. deswegen wollt ich das wissen. :-)
aber danke für die antwort
Hallo nadin,
hi, man kann auch eine exit anweisung in eine subroutine
schreiben und es funktioniert, aber es ist kein schöner
programmierstil.
Warum nicht?
Gruesse,
CK
Halihallo Christian
hi, man kann auch eine exit anweisung in eine subroutine
schreiben und es funktioniert, aber es ist kein schöner
programmierstil.
Warum nicht?
In http://forum.de.selfhtml.org/archiv/2003/7/53969/ wurde darüber diskutiert.
Viele Grüsse
Philipp
Halihallo Christian
hi, man kann auch eine exit anweisung in eine subroutine
schreiben und es funktioniert, aber es ist kein schöner
programmierstil.
Warum nicht?
Sorry, der Thread enthält viel Themenfremdes. Meine Hauptaussage zu dieser Frage war:
<cite>
Es ist einfach unschön, das Programm in einer Schleife oder Prozedur zu beenden. Eine
Prozedur ist eine "atomare" Verarbeitungsvorschrift und Atome soll man bekanntlich nicht
spalten (exit zwischen drin), sonst fliegt einem das Haus um den Kopf :-)
Der Aufbau des Programmes ist einfach schön hierarchisch aufgebaut und dies íst schönes
Programmieren. Man könnte dies mit dem "goto"-Paradigma vergleichen: Das Umherspringen
wird heute als schlechter Programmierstil gewertet, da der Programmfluss einfach sehr
schwer nachzuvollziehen ist. Ähnlich ist es mit exit in Prozeduren.
Oder anders: Eine Prozedur oder besser: eine Funktion gibt einen Wert zurück. Nach einer
Funktion soll entweder weitergearbeitet werden, oder nicht (exit). Aber: Diese
Entscheidung darf nicht bei der Funktion selber liegen, sondern vom äusseren
Programmkontext. Ein anderes Programm braucht vielleicht dieselbe Funktion und will
bei einem Fehler weiterarbeiten, ein exit wäre hier in der Funktion fatal. Wann ein
Programm beendet wird ist von der Aufgabenstellung abhängig, nicht von einer Funktion.
Demnach soll das Hauptprogramm entscheiden, wann schluss ist.
</cite>
gewesen. An die Threaddrift richtung Tainted-Modus und "use Carp" hatte ich mich nicht
mehr erinnert.
Viele Grüsse
Philipp
Hallo,
Es ist einfach unschön, das Programm in einer Schleife oder Prozedur zu beenden.
Oder um einfach die Dokumentation zu exit() zu zitieren:
Don't use exit to abort a subroutine if there's any chance that someone might want to trap whatever error happened. Use die instead, which can be trapped by an eval.
In Modulen verwende ich grundsätzlich kein exit() um den Blackbox-Ansatz aufrecht zu erhalten. Im main-Kontext kann es aber andererseits durchaus vorkommen, daß ich in Prozeduren das eine oder andere exit() verwende. Dann allerdings i.d.R. in Verbindung mit einem END-Block, um allfällige Aufräumarbeiten zu erledigen.
Warum Du allerdings in Schleifen auch kein exit() benuzen willst, kann ich nicht so wirklich nachvollziehen. EIn all zu starres Festhalten an irgendwelchen Programmierrichtlinien (die Betonung liegt auf 'starres') finde ich an sich nicht gut, da es schnell dazu kommt, daß sie dann dogmatisch angewandt werden. Und ich habe grundsätzlich was gegen Dogmen;-)
Grüße
Klaus