Thread Was bedeutet das "-" ?
(19 answers)
Opened by hlubenow at 2009-02-22 22:54 #Kein Kommentar+2009-02-23 23:56:32-- naja es versteckt sich was dahinter, es ist aber kein Bestandteil der Sprache sondern wie gesagt eine beliebte Technik von manchen Modulautoren. Um es ganz genau zu machen, bei einem Sub-Aufruf wird eine Liste von Skalaren übergeben, ob diese aus einem Hash, einem Array, oder einer Literalen Liste stammt kann das Sub nicht wissen (es sei den man übergibt explizit Referenzen) Code (perl): (dl
)
1 2 dosub(@array,%hash,"literale ","Listen ","Elemente"); # alle arrays und hashes werden zur Liste abgeflacht # In Sprachen wie Python oder JS ist würden hier an den ersten beiden Positionen Referenzen übergeben, weil dort IMHO alles eine Referenz oder ne Konstante ist. manche Autoren wollen aber die Möglichkeit wahlweise benannte Parameter statt positionaler zu übergeben. Sie prüfen dann die ersten Elemente in @_ nach 2er-Gruppen, bei denen der erste Skalar mit einem dash beginnt. Bleibt der Dash aus solls ein positionale Liste sein. Kommt ein Dash wird er dann natürlich entfernt wenn die Variable gesetzt wird. ![]() ![]() Anwendungsbeispiel Ich weiß noch das Lichtkind letztens in Frankfurt über WxPerl vorgetragen hat und es mir ziemlich gruselte als er lobte wie schnell man sich an die zig Parameter langen positionalen Aufrufe gewöhnt... (habs dann gleich die Aussprache in WixPerl geändert) Genau hier könnte nun der Modulautor oben beschriebene Technik einsetzen um jetzt optional benannte Parameter nachträglich zu erlauben OHNE die Rückwärtskompatibilität kapput zu machen. Conways Vorschlag in PBP find ich übrigens viel sinniger statt Dashes lieber ein Hashref zu übergeben. Ist das erste Listenelement ein Hashref weiß man das es kein positionaler Parameter ist. (selbstverständlich sollte als erster positionaler Parameter kein Hashref erlaubt sein ; ) Man spart viele Dashes für nur 2 zusätzliche Curlies! me and my writeups
|