例如,给定(1,2,5,6,7),我想确定3和4缺失?
我发现以下代码实现了我的目标。
#!/usr/bin/perl
use Data::Dumper;
@list= (1,2,5,6,7);
@missing = map $list[$_-1]+1..$list[$_]-1, 1..@list-1;
print Dumper(\@missing);
输出:
$VAR1 = [
3,
4
];
有人可以解释上面代码背后的逻辑吗?
答案 0 :(得分:4)
地图 EXPR ,列表
评估LIST的每个元素的BLOCK或EXPR (在每个元素的本地设置$ _)并返回列表值 由每次评估的结果组成。
在你的情况下:
map $list[$_-1]+1..$list[$_]-1, 1..@list-1;
列表:1..@list-1
:是一个包含1到4(数组长度为1)的元素的列表
EXPR:$list[$_-1]+1..$list[$_]-1
:使用上面的索引(1到4)并使用范围运算符计算表达式。
在下面的每次迭代中都会发生:
$list[1-1]+1..$list[1]-1: 1+1..2-1 = ''
$list[2-1]+1..$list[2]-1: 2+1..5-1 = 34
$list[3-1]+1..$list[3]-1: 5+1..6-1 = ''
$list[4-1]+1..$list[4]-1: 6+1..7-1 = ''