再一次perl cookbook,我知道这个程序做了什么,我理解了大部分内容,但是代码下面的代码让我感到惊讶。 它基本上是使用if else但是($ i ++& 1)是什么意思??
#!/usr/bin/perl -w
# fixstyle2 - like fixstyle but faster for many many matches
use strict;
my $verbose = (@ARGV && $ARGV[0] eq '-v' && shift);
my %change = ();
while (<DATA>) {
chomp;
my ($in, $out) = split /\s*=>\s*/;
next unless $in && $out;
$change{$in} = $out;
}
if (@ARGV) {
$^I = ".orig";
} else {
warn "$0: Reading from stdin\n" if -t STDIN;
}
while (<>) {
my $i = 0;
s/^(\s+)// && print $1; # emit leading whitespace
for (split /(\s+)/, $_, -1) { # preserve trailing whitespace
print( ($i++ & 1) ? $_ : ($change{$_} || $_));
}
}
__END__
analysed analyzed
答案 0 :(得分:1)
$i++
返回$ i的值,然后递增$ i。 &
是&#34;按位和&#34;运算符,所以它需要前面提到的$ i值并检查它的最后一位(二进制中的1是00..01)。
由于$ i在每次迭代中递增1,因此在二进制中,其最后一位从1变为0,反之亦然,因此表达式只能确定奇数与偶数单词。