Hoi Roland,
Nee, wars nicht ;-) Der relevante Teil war im Grunde der Head.
Mmh? Den Funktionskopf mit Prototyp hatte ich doch gepostet.
Aber nicht den Head des Scriptes.
Da du die Funktion (in sich selbst)
aufrufst, bevor sie komplett analysiert wurde, wird halt dieser
Fehler erzeugt.
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. Ich
denke, erst dann wird der Prototyp definiert; zumindest faende ich
das logisch: so kann erst auf syntaktische Korrektheit geprueft
werden.
Die Semantik des Prototyps aendert sich doch nicht mehr durch
die Definition der Funktion. Und wenn es so waere, wie Du sagst,
dann duerfte Perl ja auch nicht wissen, dass es ueberhaupt einen
Prototypen gibt, gegen den es pruefen muss. Also entweder es hat
ihn gesehen und weiss dass es einen gibt und kann dagegen pruefen,
oder es hat ihn nicht gesehen, kann dann auch nicht pruefen, aber
kann auch keine Warnung ausgeben, weil nicht bekannt ist, dass es
einen Prototypen gibt.
Allgemein sind eigentlich die Prototypen abgeraten (ich benutze sie
allerdings trotzdem :-), weil sie wiederum Bugs oder Gefahren mit
sich bringen. Sie scheinen nicht ganz sauber implementiert zu sein.
Naja, Workarounds hab ich genug in der Hosentasche, daran soll's
nicht scheitern. ;-)
Das ist eigentlich kein Wuergaround ;-), sondern eine ganz normale
Methode; Funktionen mit Prototypen haben im Normalfall auch
Forward-Deklarationen.
Gruesse,
CK