Kurt Z: Äpfen und Birneln

Beitrag lesen

i sag nur "Kommunikativgesetz" - mehr sag i net!

Soag moal, woas hat Perl jetzt mit Kölner Bushoaltestellen zu tun???

(du als Bayer kommst aber weit herum *fg*)

(Tatsächlich findet Google 60 Treffer für "Kommunikativgesetz", u.a. bei einem Pädagogikportal!)

Ich gebe meinem Kind einen Korb mit Birnen und eine Apfel ist das gleiche wie wenn ich ihm einen Apfel und eine Korb mit Birnen gebe.

Aha Kommutativgesetzt...

Perl Subroutinen kennen in der Übergabe  nur Skalare, deine Birnen werden also in Äpfel umgemodelt. (genauer gesagt dein Apfelkorb wird in Einzeläpfel zerlegt) Deswegen gibts keine Kommutierung, höchstens eine Assoziierung.

Der Syntax
                ($wert1,$wert2)=@arr3;

ist auch ein allgemeiner und nicht auf Parameterübergaben beschränkt. Das Specialfeature dieses Syntax ist:

Arrays in der Klammerliste sind gierig, d.h. der Apfelkorb wird bis zur Hardwaregrenze abgefüllt ( d.h. ist ein Fass ohne Boden), wer in der Liste dahinter kommt geht IMMER leer aus.

Das hat einen schönen Seiteneffekt, Routinen mit unbekannter Anzahl von Restparametern, können einfach behandelt werden

($para1, $para2, @rest, $immer_undef)=@_;

Also immer dran denken Perl übergibt nur *Skalare* (i.d.R [1]). Übergibst du Strukturen werden sie aufgelöst (flattening) und du musst die Elemente wieder richtig zuornen. Deswegen in komplizierten Fällen lieber eine Referenz auf die Struktur übergeben, weil Refs selbst spezielle Skalare sind.

Was die andere Frage anbelangt:

$w=$x=$y="zzz";

meine ich keinen speziellen Syntax zu erkennen, sondern das Abfangen von Rückgabewerten.

D.h. das du $x das Ergebnis aus $y="zzz" zuweist. Die Zuweisung "=" ist nicht void sondern returniert den Zuweisungswert, deswegen wird "zzz" an $x weitergereicht, usw, usf. Da ganz links nichts mehr steht wird der Rückgabewert dann ignoriert.

Alles klar?
  Kurt

[1] du kannst natürlich auch mit Prototypen arbeiten, aber die machen den Code später schwerer lesbar, deswegen rät Damian Conway hier zu recht zu sparsamen Einsatz!