zoukankan      html  css  js  c++  java
  • 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
    ";
     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
    ";
    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 
    "
    5 }

    结果

    010 
    230 
    11 
    56 

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

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

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

    1
    1
    RRR ttt
    1
    RRR ttt

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

    无              标量     永远1或0

    有              标量     永远1或0

    无              列表     永远(1或0)

    有              列表     结果的列表

  • 相关阅读:
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 3037 Saving Beans【Lucas定理】【模板题】【模板】【组合数取余】
    8.Math 对象
  • 原文地址:https://www.cnblogs.com/spriteflk/p/5741915.html
Copyright © 2011-2022 走看看