Thread Precedences und Schönheit (21 answers)
Opened by RalphFFM at 2018-03-31 14:27

RalphFFM
 2018-03-31 14:27
#188192 #188192
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Gewollt ist eine Integer-Zählervariable $i die von 1 bis 5 läuft, und nach 5 wieder bei 1 anfängt.

Erster Gedanke:
Code: (dl )
  $i = $i < 5 ? $i++ : 1;

Aber oje:
Code: (dl )
1
2
  perl -e '$i=1; $i = $i<5 ? $i++ : 1; print "$i\n";'
1

Ok, stimmt ja, das ++ wird ja erst später ausgeführt.
Andererseits insofern etwas seltsam, dass das ++ hier im Ergebnis ohne Wirkung bleibt.

Anderer Gedanke:
Code: (dl )
  $i < 5 ? $i++ : $i=1;

Aber, schön wärs gewesen:
Code: (dl )
1
2
3
  perl -e '$i=1; $i < 5 ? $i++ : $i=1; print "$i\n";'
Can't modify postincrement (++) in scalar assignment at -e line 1, near "1;"
Execution of -e aborted due to compilation errors.

Ok, stimmt ja, Perl hält sich rigoros an die Precedences und versucht dann dem ganzen Teil links den Wert 1 zuzuweisen. So wars natürlich nicht gemeint.

Was funktioniert ist:
Code: (dl )
  $i = $i < 5 ? ++$i : 1;

Das aber sieht mit dem Inkrementieren von $i für mich optisch irgendwie "doppelt" aus. Da wird $i gefühlt zweimal geändert. Einmal mittels ++, und einmal durch die Zuweisung (=).
Code: (dl )
1
2
  perl -e '$i=1; $i = $i < 5 ? ++$i : 1; print "$i\n";'
2

Hmmm. Klar funktioniert, aber ist das schön?

Hat wer noch mehr Ideen wie man das kurz und schön ausdrücken kann?

View full thread Precedences und Schönheit