my @classes = qw( odd even ); while (...) { push @classes, my $class = shift @classes; ... }
Here's a collection of alternatives, including those already presented:
my $odd; while (...) { my $class = ($odd++ % 2 == 0) ? 'odd' : 'even'; ... }
my $odd; while (...) { my $class = $odd++ % 2 ? 'even' : 'odd'; ... }
my $odd; while (...) { my $class = $odd ^= 1 ? 'odd' : 'even'; ... }
my $odd; while (...) { my $class = ('odd','even')[$odd++ % 2]; ... }
my $odd; while (...) { my $class = ('odd','even')[$odd ^= 1]; ... }
my $class = 'even'; while (...) { $class = ($class eq 'odd') ? 'even' : 'odd'; ... }
my @classes = qw( odd even ); while (...) { push @classes, my $class = shift @classes; ... }
my $class = 'even'; while (...) { ($class) = grep $_ ne $class, qw( odd even ); ... }
my ($class, %flip_class) = qw( even odd even even odd ); while (...) { $class = $flip_class{$class}; ... }
my ($class, %flip_class) = qw( odd even )[1,1,0,0,1]; while (...) { $class = $flip_class{$class}; ... }
use Tie::Cycle qw( ); tie my $class, 'Tie::Cycle', [ qw( odd even ) ]; while (...) { ... }
HTML::Template's loop even/odd markers.
nth-child(even) and nth-child(even) CSS 3 pseudo-classes.
All code snippets tested except the one using Tie::Cycle.
Update: Added wind's solutions.
In reply to Re: Odd and even table rows
by ikegami
in thread Odd and even table rows
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |