$i = $i < 5 ? $i++ : 1;
$i < 5 ? $i++ : $i=1;
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.
$i = $i < 5 ? ++$i : 1;
$i += $i < 5 ? 1 : -4;
$i = $i < 5 ? $i+1 : 1;
$i = $i < 5 ? $i+1 : 1;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use strict; use warnings; use Tie::Scalar; use base qw(Tie::StdScalar); sub FETCH{ my $self = shift; print "$$self\n"; return $$self; } tie my $i, 'main'; $i = 1; $i = $i < 5 ? ++$i : 1; # Ausgabe 1 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
use Tie::Scalar; use base qw(Tie::StdScalar); sub STORE{ my $self = shift; my $valu = shift; $$self += $valu; print "$$self\n"; return $$self; } tie my $i, 'main'; $i = 1; $i = $i < 5 ? ++$i : 1; # Ausgabe 1 3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use strict; use warnings; use Tie::Scalar; use base qw(Tie::StdScalar); sub TIESCALAR{ my $class = shift; my $init = shift || 1; bless \$init, $class } sub FETCH{ my $self = shift; print "FETCH: $$self\n"; $$self; } tie my $i, 'main', 1; $i = $i < 5 ? ++$i : 1; print "Finale: $i\n"; # Ausgabe FETCH: 1 FETCH: 1 FETCH: 2 Finale: 2
1 2 3 4 5 6 7 8 9 10
++$i for 1..5; # Gibt aus: FETCH: 1 FETCH: 2 FETCH: 3 FETCH: 4 FETCH: 5 FETCH: 6 Finale: 6
2018-03-31T16:21:13 LinuxerNaja, zu Deinem "anderen Beispiel".
Wenn Du $i mit 1 initialisiert und dann 5 mal 1 addierst, ist es auch korrekt, dass am Ende 6 rauskommt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#! /usr/bin/perl use strict; use warnings; use 5.020; my $limit = 100; my $i = 0; while ( 1 ) { $i = $i < 5 ? ++$i : 1; printf "i: %2d\n", $i; last if 0 >= --$limit; } __END__
1 2 3 4 5 6 7 8 9 10 11 12 13
use v5.10; use strict; use warnings; sub one2five{ state $i = -1; ++$i; return 1 + ($i % 5); } for (1..30){ printf "%d\n", one2five(); }
2018-03-31T21:16:31 RalphFFMFunktioniert. Eine wirklich abgefahrene Lösung. Ich hab hier 3 ältere Perl-Bücher unterschiedlicher Dicke. Aber in keinem Inhaltsverzeichnis ist state genannt.
1 2 3 4 5 6 7 8 9 10 11
my $i=0; for ( 1 .. 1_000 ) { # mach irgendwas # vielleicht auch mit $i $i++; # hängt von dem ab, was in der Schleife so alles mit $i passiert $i = 1 if $i >= 5; }
1
2
3
4
5
6
7
8
9
10
11
$ perl -e '$i=1; while (1) { print $i, "\n"; $i = $i % 5 + 1 }' | head -10
1
2
3
4
5
1
2
3
4
5
perl -e 'while(1){print for 1..5 }'