perl的map函数

来源:

perl的map函数的使用:

 

语法

map EXPR, LIST    这个当中有,

map BLOCK LIST    这个当中没有,
 

定义和使用

对list中的每个元素执行EXPR或BLOCK,返回新的list。对每一此迭代,$_中保存了当前迭代的元素的值。

 

返回值

如果返回值存储在scalar标量中,则代表map()返回数组的元素个数;

如果返回值存储在list中,则代表map()函数的数组;

 

实例1 (将单词首字母大写)

 1 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#!/usr/bin/perl -w
 2 
 3 @myNames = ('jacob', 'alexander', 'ethan', 'andrew');
 4 @ucNames = map(ucfirst, @myNames);
 5 $numofucNames = map(ucfirst, @myNames);
 6 
 7 foreach $key ( @ucNames ){
 8  print "$key\n";
 9 }
10 print $numofucNames;

结果为

Jacob
Alexander
Ethan
Andrew
4

 

实例2 (获得所有的书名中包含的单词,且转化为大写)

1 my@books = ('Prideand Prejudice','Emma', 'Masfield Park','Senseand Sensibility','Nothanger Abbey',
2 'Persuasion',  'Lady Susan','Sanditon','The Watsons');
3 
4 my@words = map{split(/\s+/,$_)}@books;
5 my@uppercases = map uc,@words;
6 foreach $upword ( @uppercases ){
7  print "$upword\n";
8 }

结果为 (Perl map函数的输入数组和输出数组不一定等长,在split起过作用之后,当然@words的长度要比@books长了。)

PRIDEAND
PREJUDICE
EMMA
MASFIELD
PARK
SENSEAND
SENSIBILITY
NOTHANGER
ABBEY
PERSUASION
LADY
SUSAN
SANDITON
THE
WATSONS

 

实例3 (将多余2位的数字提取到新的list)

1 my @buildnums = ('R010','T230','W11','F56','dd1');
2 my @nums = map{/(\d{2,})/} @buildnums;
3 foreach $num (@nums){
4   print "$num \n"
5 }

结果

010 
230 
11 
56 

 

实例4  匹配的标量和列表上下文返回值

 1 $a = 'RRR32Sttt';
 2 @yy = $a=~/RRR.*ttt/;
 3 $numofyy = $a=~/RRR.*ttt/;
 4 print "@yy\n";
 5 print "$numofyy\n" ;
 6 print "$1";
 7 
 8 @yy2 = $a=~/(RRR).*(ttt)/;
 9 $numofyy2 = $a=~/(RRR).*(ttt)/;
10 print "@yy2\n";
11 print "$numofyy2\n";
12 print "$1 $2";

结果   (正则表达式匹配后返回的为数组或长度,取决于表达式中是否有()或者接收的变量类型)

1
1
RRR ttt
1
RRR ttt

表达式中是否有()       接收的变量类型       结果

无              标量     永远1或0

有              标量     永远1或0

无              列表     永远(1或0)

有              列表     结果的列表

 

posted @ 2016-08-05 16:34  醉游  阅读(4433)  评论(0编辑  收藏  举报