它是如何工作的"$ _&1"in perl

V A*_*esh 9 arrays perl

我是perl初学者,我正在阅读grep函数来过滤列表.我遇到了以下程序.

#!/usr/bin/perl

use strict;
use warnings;

# initialize an array
my @array = qw(3 4 5 6 7 8 9);

# first syntax form:
my @subArray = grep { $_ & 1 } @array;
Run Code Online (Sandbox Code Playgroud)

该语句my @subArray = grep { $_ & 1 } @array;返回奇数 @array.我不明白表达式($_ & 1)是如何工作的.我在谷歌搜索但没有找到任何有用的链接.

  • 那是什么特殊的操作员吗?

  • EXPR还有其他变种吗?

提前致谢.

tau*_*uli 10

$_是保存当前测试值的变量,&是二元AND运算符,并且1只是第一个.此表达结合了的所有的位$_1相互通过逻辑AND.因此,如果值为奇数,则返回1;如果值为偶数,则返回0.

举个例子,假设$ _是123,那么它的二进制表示就是1111011.十进制数1将是00000001,因此将所有位组合为AND得到

123 = 1111011
  1 = 0000001
      - AND -
      0000001 = 1
Run Code Online (Sandbox Code Playgroud)

另一个例子 200 & 100

200 = 11001000
100 = 01100100
      - AND --
      01000000 = 64
Run Code Online (Sandbox Code Playgroud)