@KurtZ: Sehr schöne Darstellung! Vielen Dank dafür.
@SchaubFD:
SchaubFD+2008-02-13 13:40:07--Auch wenn meine Fragen nervig sind, sind Übergaben von Hashes nur über Referenzen möglich?
Perl unterscheidet zwischen Referenzen und Variablen in Form von Skalaren, Arrays (Listen) und Hashes (assoziative Listen). Wenn man sich an Referenzen gewöhnt hat ist das okay - auch wenn man explizit dereferenzieren muss. Ich verwende deshalb oft direkt Referenzen auf anonyme Arrays oder Hashes, sodass die Dereferenzierungssyntax für mich die "normale" Syntax ist. So richtig an das Konzept gewöhnt habe ich mich als ich viel das Modul
HTML::Template verwendet habe. Was gewöhnungsbedürftig gelöst ist (und sich mit Perl6 ändert) ist die Verwendung von Sigils ($@%) bei der Dereferenzierung. Generell kann man über Sinn und Unsinn von Sigils diskuttieren, aber in Perl-Code erlauben sie recht zügig eine Einschätzung mit was man es gerade zu tun hat, was gerade in einer dynamisch typisierten Sprache manchmal recht hilfreich sein kann. Andere Sprachen wie z.B. Python kennen keine Variablen im klassischen Sinne, sondern ausschließlich Referenz-Typen. Eine Zuweisung bindet ein (meist unveränderbares) Objekt auf der rechten Seite des = an ein Symbol auf der linken Seite. Die Derefernzierung erfolgt aber implizit. Problematisch an dieser Stelle ist, wenn man größere Datenstrukturen zusammensetzt und nicht bedenkt, dass eine Änderung der Inhalte über alle Symbole möglich ist (speziell bei Listen). Fairerweise muss man aber sagen, dass man sich in Perl auf dem selben Wege auch in den Fuss schiessen kann. Um auf deine Ausgangsfrage zurück zu kommen: Meistens ist es sinnvoll, wenn man Funktionen hat die mehrere Hashes etc. verarbeiten/zurückliefern, die eigentliche Problemstellung nochmal zu analysieren und evtl. auf Objekte umzusteigen. Objektorientierte Programmierung hilft einem Dinge die zusammengehören auch zusammenzubehalten, sowohl Daten als auch Funktionen (die dann aber Methoden genannt werden).
Gruß,
Ronnie