Perl中的grep和map

来源:互联网 发布:苹果电脑怎么装mac系统 编辑:程序博客网 时间:2024/05/01 21:38

http://blog.chinaunix.net/uid-23391008-id-2610416.html

1、map

      对数组的每个元素计算语句值,最后将得到的最终值组成一个数组返回,$_为当前元素值

格式:

      1-1、 @arr=map 单条语句,@number;

      1-2、 @arr=map {多条语句} @number;

例子:

     @arr=map $_+1,1..3;  // @arr=(2,3,4)

     @arr=map {$_=$_+1;$_+1} 1..3;   // @arr=(3,4,5)

 

2、grep

  对数组的轮询,语句(语句块)为真-------选择,则对将该元素加入到返回的数组中(返回的数组初始为空),$_为当前元素值

格式:

      1-1、 @arr=grep 单条语句,@number;

      1-2、 @arr=grep {多条语句} @number;

例子:

     @arr=grep $_%2==1,1..3;  // @arr=(1,3)

     @arr=grep { $_%2==0} 1..3;   // @arr=(2)

============

http://blog.csdn.net/autofei/article/details/6674346

grep返回一个数字中符合条件的所有元素;map对数字中所有元素实施转化并返回结果。两者都遍历了数组,但一个用来搜索,一个用来转化。两者都支持表达式或者代码块。

[plain] view plaincopy
  1. #!/usr/bin/perl -w  
  2. use strict;  
  3.   
  4. #get positive number  
  5. my @number = (1,2,3, -1,-5);  
  6. my @positive_number = grep  $_ > 0, @number;  
  7. print "\@number: (@number)\n";  
  8. print "\@positive_number: (@positive_number)\n";  
  9.   
  10. #get sqrt  
  11. my @sqrt_number  = map sqrt $_, @positive_number;  
  12. print "\@sqrt_number: (@sqrt_number)\n";  
  13.   
  14. #split words  
  15. my @lines = ( "hello world", "not too bad" );  
  16. my @words = map m/\b(\w+)\b/g, @lines;  
  17. print "\@lines size: " . @lines . " (@lines)\n";  
  18. print "\@words size: " . @words . " (@words)\n";  
  19.   
  20. #modify email address  
  21. my @email_addresses = ( "fei\@gmail.com", "fei\@sina.com.cn" );  
  22. my @disguised_addresses = map {  
  23.     my $email = $_;  
  24.     $email =~ s/\@/ at /;  
  25.     $email =~ s/\./ dot /g;  
  26.     $email;  
  27. } @email_addresses;  
  28. print "\@email_addresses: (@email_addresses)\n";  
  29. print "\@disguised_addresses: (@disguised_addresses)\n";  

参考:http://mailman.linuxchix.org/pipermail/courses/2003-November/001368.html
0 0
原创粉丝点击