Bernhard Peissl: sekunden zu datum algorythmus

Beitrag lesen

Grüssi olle mitanaunda!

Sorry wenn ich mir hier einschalte, aber von deinem Code Yedat halte ich mich eh fern, keine Sorge, den darfst du erklären ;-) nur kurz zum shift:

was soll ich dazu sagen? ;-)
ich will nicht programmieren (auch wenn ich das in mancher hinsicht doch tue), sonst mach ich dann plözlich nichts anders als das.

hmmm mysteriös, mysteriös :-?

Bei Perl muß man die übergegebenen Werte an die Variable weitergeben ... genau das macht Shift ...

aber shift nicht doch den ersten wert aus einer liste ung gibt ihn dan zurück ... nur welche liste haben wir hier?

Die Parameter die an eine Funktion übergeben werden kann man innerhalb der Funktion abfragen, sie werden nämlich in der Variable '@_' gespeichert. Das ist ein Feld, und an jeder Stelle steht ein Parameter mit der die Funktion aufgerufen wurde. Beispielsweise:

Wenn du bei einem Aufruf der Funktion 'func' zwei Werte übergibst ('string1' und 'string2') dann kannst du folgendermassen in der Funktion abfragen was übergeben wurde:

Aufruf: func('string1','string2')
Abfrage:
sub func {
    ($param1, $param2) = @_;
    print $param1."-".$param2;
}

Somit sind deine Übergabeparameter aus dem Feld in zwei Variablen aufgeteilt worden. Wenn du mehr Parameter übergeben willst, musst du das Feld (@_) eben auf mehrere Variablen "aufteilen".

Und shift, macht im Grunde nix anders als von diesem Feld (@_) immer das oberste Element abzufragen und an eine Variable zurückzugeben:

Das heisst also die Zeile
($param1, $param2) = @_;

macht dasselbe wie die zwei:
$param1 = shift;
$param2 = shift;

Es wird immer von oben weggenommen und (an eine Variable) zurückgegeben, ähnlich wie auch bei einem Kartenstoss. Du hebst immer nur eine Karte ab, und das immer von oben, an die unterste Karte (zuletzt übergebenen Parameter) kommst du nur ran, wenn du alle Karten w.o. abgehoben hast.

Wenn ein Stapel nun nur aus einer Karte besteht? Nun ja, dann nimmt er halt nur diese eine ;-) Und wenn an eine Funktion nur ein Parameter übergeben wird, dann hat das Feld @_ eben nur einen Eintrag, der dann mir shift stinknormal abgefragt wird. Da er immer das oberste nimmt ist die anzahl der Elemente fast wurscht, es müssen nur >= 1 Elemente in der Liste sein!

Der Aufruf aus Yedats script: sj($jahr) sollte dir nun etwas klarer sein ;-) ==> @_=($jahr)  ==> $j=shift;

So, ich hoffe ich hab dich nicht noch mehr verwirrt ;-)

lg bernhard