my @ori=qw(1 2 3 4 51 45 66);
my @aft=grep $_=~/1$/ ;
把@ori数组里的每个元素放到表达式里测试,返回true就放到@aft
等价于
my @aft;
foreach(@ori) {
if($_=~/1$/) {
push @aft,$_;
}
}
所以grep操作后的返回数组的长度有可能比原数组短
my @ori=qw(1 2 3 4 51 45 66);
my @aft=map $_+1 ;
相当于
my @aft;
foreach(@ori) {
push @aft, $_+1;
}
所以map操作不改变数组长度
以下是我的总结:
1.grep的第一个参数无论是表达式还是子函数,最后返回值一律按boolean处理
2.map的第一个参数无论是表达式还是子函数,最后返回值一律按变量处理,这个变量可以是标量,可以是数组,可以是其他的数据结构
3.grep和map的返回值绝对是数组类型。至于用在什么场合就变成了相应的类型
阅读(904) | 评论(0) | 转发(0) |