perl的map函數

來源:正則表達式

perl的map函數的使用:數組

 

語法ide

map EXPR, LIST    這個當中有,函數

map BLOCK LIST    這個當中沒有,
 ui

定義和使用idea

對list中的每一個元素執行EXPR或BLOCK,返回新的list。對每一此迭代,$_中保存了當前迭代的元素的值。spa

 

返回值scala

若是返回值存儲在scalar標量中,則表明map()返回數組的元素個數;code

若是返回值存儲在list中,則表明map()函數的數組;blog

 

實例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)

有              列表     結果的列表

相關文章
相關標籤/搜索