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 關注
- 782 瀏覽
添加回答
舉報