在循环中交替变量值的最佳方法? (Perl的)

时间:2014-02-07 15:37:22

标签: perl loops

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循环的每次迭代,在两个不同值之间交替的最佳方法是什么?上面的简单示例,是否有更好的方法来保持计数器和修改以找到偶数值?

6 个答案:

答案 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";
}