Die Erklärung ist eigentlich einfach und sie gilt nicht nur für Perl sondern für viele andere Programmiersprachen (bspw. C) auch:
Die Zeile „a[++i] = b[i];“ enthält mehrere Anweisungen: zum einen das Inkrementieren von i, zum anderen die Zuweisung des Wertes auf der rechten Seite an die Referenz der linken Seite.
Obiges enthält die einzelnen Schritte
a) Inkrementieren von i
b) Holen des Wertes b[i]
c) Speichern in a[i]
und es ist nur festgelegt, dass a) vor c)
und b) vor c) ausgeführt wird. In welcher Reihenfolge nun a) und b) ausgeführt werden, d.h. wann nun i inkrementiert wird, ist abhängig von der Implementierung des Interpreters/Compilers. Meist bestimmen nämlich in diesen Fällen die vorhandenen Prozessor-Befehle (hier: gibt es indizierten Zugriff mit Pre-Inkrement des Index?) die Reihenfolge.
Die Erklärung ist eigentlich einfach und sie gilt nicht nur für Perl sondern für viele andere Programmiersprachen (bspw. C) auch:
Die Zeile „a[++i] = b[i];“ enthält mehrere Anweisungen: zum einen das Inkrementieren von i, zum anderen die Zuweisung des Wertes auf der rechten Seite an die Referenz der linken Seite.
Obiges enthält die einzelnen Schritte
und es ist nur festgelegt, dass a) vor c)
und b) vor c) ausgeführt wird. In welcher Reihenfolge nun a) und b) ausgeführt werden, d.h. wann nun i inkrementiert wird, ist abhängig von der Implementierung des Interpreters/Compilers. Meist bestimmen nämlich in diesen Fällen die vorhandenen Prozessor-Befehle (hier: gibt es indizierten Zugriff mit Pre-Inkrement des Index?) die Reihenfolge.