我是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)