Re!
Mmh? Den Funktionskopf mit Prototyp hatte ich doch gepostet.
Aber nicht den Head des Scriptes.
Ach so, Du wolltest nur wissen, ob ich auch wirklich nirgendwo eine Forward declaration habe?
Hier bin ich nicht einverstanden. Dort wo der Aufruf steht, hat
Perl den Prototyp bereits gesehen, also kann es ihn auch pruefen.
Ja, aber der Syntax-Baum fuer die Sub wurde noch nicht erstellt.
Wurde er im Fall einer Forward declaration aber auch nicht.
Ich
denke, erst dann wird der Prototyp definiert; zumindest faende ich
das logisch: so kann erst auf syntaktische Korrektheit geprueft
werden.
Finde ich ueberhaupt nicht logisch. Was hat denn die syntaktische Korrektheit der Funktionsdefinition fuer eine Relevanz fuer den Prototypen?
Die Semantik des Prototyps aendert sich doch nicht mehr durch
die Definition der Funktion.
Allgemein sind eigentlich die Prototypen abgeraten (ich benutze sie
allerdings trotzdem :-), weil sie wiederum Bugs oder Gefahren mit
sich bringen.
Ich benutze sie auch schon seit Anfang an, schliesslich komme ich von C. ;-)
Aber dass davon abgeraten wird, habe ich noch nicht gehoert. Lediglich, dass man nicht wild und quer bestehende aeltere Funktionen prototypen soll, auf deren Verhalten sich jemand an anderer Stelle verlaesst (siehe dazu perlsub).
Sie scheinen nicht ganz sauber implementiert zu sein.
Das wuerde zumindest dieses seltsame Verhalten ... also nicht erklaeren, aber weniger verwunderlich machen.
Das ist eigentlich kein Wuergaround ;-),
Solange mir das Verhalten keiner zweifelsfrei logisch erklaeren kann, ist das fuer mich ein Bug. ;-)
sondern eine ganz normale
Methode; Funktionen mit Prototypen haben im Normalfall auch
Forward-Deklarationen.
Wieso das denn? Ich benutze Forwarddeklarationen praktisch nie, Prototypen dagegen soweit moeglich immer. Eigentlich braucht man sie (FwdDecl) nur, wenn zwei Funktionen sich gegenseitig aufrufen. Evtl. noch, wenn man eine Funktion verwendet, die erst zur Laufzeit nachgeladen wird und daher nicht einfach vorher mit use aus einem Modul geholt werden kann. Oder halt, wenn man diesem seltsamen Programmierstil froehnt, alle Funktionen erst nach dem Hauptprogramm zu definieren. Aber wer macht das schon ausser ein paar Unix-Hackern ... ;-)
So long