my @arr = (1,2,3,4,5,6,7,8,9);
my $counter = 0;
foreach my $a (@arr) {
my $str;
if ($counter % 2 == 0) {
$str = 'hi';
} else {
$str = 'bye';
}
print $str . "\n";
$counter++;
}
对于while循环的每次迭代,在两个不同值之间交替的最佳方法是什么?上面的简单示例,是否有更好的方法来保持计数器和修改以找到偶数值?
答案 0 :(得分:5)
my @arr = qw( a b c );
for my $i (0..$#arr) {
print "$arr[$i] ", $i % 2 ? 'bye' : 'hi', "\n";
}
答案 1 :(得分:1)
好名字。
my /*boolean*/ $even = 0;
foreach ...
next if ... # skipping line
$even = !$even;
... # work
print $even ? 'hi' : 'bye';
答案 2 :(得分:0)
我会这样做:
...
my @arr = (1..9);
for (my $i=0; $i<scalar(@arr); $i++) {
my $str = ($i % 2 == 0) ? 'hi' : 'bye';
print "$str\n";
}
答案 3 :(得分:0)
my ($foo, $bar) = qw(foo bar);
for (0..10) {
print "$foo\n";
($foo, $bar) = ($bar, $foo);
}
答案 4 :(得分:0)
一个奇怪的,但没有计数器,也没有 modding来查找偶数值:
use strict;
sub foo {
shift || return and bar(@_);
print "doing something with Value2 \n";
}
sub bar {
shift || return and foo(@_);
print "doing something with Value1 \n";
}
foo(1..100);
通过调用foo()
或bar()
并选择100的偶数或奇数值来做任何你想做的事。也许你想使用$#arr
内嵌硬编码值等等。
但请不要写这样的代码。
答案 5 :(得分:0)
无法抗拒:
my @arr = (1,2,3,4,5,6,7,8,9);
my @alt = qw( hi bye );
my $counter = 0;
foreach my $a (@arr) {
print $alt[($counter++ % 2)] . "\n";
}
或者每个都门的评论使用“&amp;”与模数(%)相比,它应该更有效率
my @arr = (1,2,3,4,5,6,7,8,9);
my @alt = qw( hi bye );
my $counter = 0;
foreach my $a (@arr) {
print $alt[($counter++ & 1)] . "\n";
}