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)

有              列表     結果的列表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM