2 回答
TA贡献1873条经验 获得超9个赞
先看个 grep 的例子
1 2 3 4 5 6 | @list = ( 1..10 ) ; @want1 = grep { $_ % 2 } @list ; @want2 = grep !/^1/, @list;# 找出非以 '1' 为开头的元素
print "@want1"; # 得出 1 3 5 7 9 print "@want2"; # 得出 2 3 4 5 6 7 8 9 (排除了 1 和 10) |
再换一种很传统的写法来做到同一个结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @list = ( 1..10 ); @want1 = (); @want2 = (); foreach ( @list ) { if ( $_ % 2 ) { push @want1, $_ } } foreach ( @list ) { if ( $_ !~ /^1/ ) { push @want2, $_ } } print "@want1"; # 得出 1 3 5 7 9 print "@want2"; # 得出 2 3 4 5 6 7 8 9 |
grep 的作用就是将 最後面那个数组 里面的每一个元素, 一个一个以 $_ 的形式放入 { ... } 或 / ... / 中进行运算, 如果该表达式 /.../ 或 block { ... } 最後的结果为真时, 就会将该 $_ 的值 push 到 等号左边 的数组中
grep 还有个姐妹叫 map(), 应用方法和逻辑跟 grep 基本上完全一样, 唯一不同的是, grep 只会将 $_ 加到左边数组, 而 map 会将最後的运算结果 ( 像 sub 的 return 值 ) 加到左边数组
- 2 回答
- 0 关注
- 745 浏览
添加回答
举报