hi!
Schon mal nachgedacht ein Modul für CPAN zu schreiben
(wenn schon nicht passiert) ? :-)
Ist noch nicht passiert ;) Aber ein Modul, das nur aus einer einzigen Funktion besteht?
Ich habe aber trotzdem eine Frage die mich beschäftigt:
Wie weis die Funktion &intersect wo die Grenze zwischen
einzelnen Arrays in @_ ist (weil das auch ein
Array ist). Macht das die Anweisung "@{scalar shift}" ?
Wenn ja, wie ?
Das Problem hatte ich anfangs, es war allerdings auch das größte ;) Tatsächlich liefert shift nämlich auch bei übergebenen Arrays nicht das gesamte Array, sondern nur ein einziges Element. Deshalb werden der Funktion ja jetzt nicht mehr Arrays als Parameter übergeben, sondern Referenzen auf Arrays, die allerdings nur einen Skalar darstellen. Mit "@{scalar shift}" werden die Referenzen de-referenziert und ich erhalte das Array, dessen Referenz ich übergeben habe. Referenzen sind sowas ähnliches wie Pointer in C.
Das "scalar shift" wird sichergestellt, dass nur ein Skalar aus der Parameterliste gezogen wird, ob das wirklich nötig ist, weiß ich gar nicht so genau, aber es ist zumindest nicht verkehrt :-)
Evtl. sollte man die Variablen, die in der Funktion verwendet werden - zumindest $i - mit "my" lokal anlegen, damit es nicht zu evtl. Problemen kommt, wenn die Variablen schon früher im Skript verwendet wurden und dann in der Funktion falsch initialisiert sind.
Alle Klarheiten beseitigt? :)
bye, Frank!