1. 让我们先看map的语法
map BLOCK List
map EXPR,List
BLOCK是一个用{}包围的代码块。EXPR可以是子函数名、正则表达式等。List是输入列表。
简单地说,map就是起了一个替代foreach循环的作用,map会把数组List中的元素挨个取出,放到系统变量$_中,然后调用BLOCK去处理。值得强调的是,除非有很特殊的理由,不要去修改$_的值,因为修改$_就是直接改了原始数组里的元素!BLOCK 处理过的结果由map返回,仍然是一个数组。
2. 一个例子:计算一系列文件大小
my @sizes = map { -s $_ } @filenames;
上面例子用-s *** 作取得一些文件的大小,存到数组中去。
3. 是不是说map函数的输入数组和输出数组一定等长呢?不一定的,看这个
my @books = ( 'PrIDe and Prejudice','emma','MasfIEld Park','Sense and Sensibility','Nothanger Abbey','Persuasion','Lady Susan','Sanditon','The Watsons');
现在取出书名里面所有用到的单词,并且全部转换成大写
my @words = map { split( //s+/,$_)} @books;
my @uppercases = map uc,@words;
在split起过作用之后,当然@words的长度要比@books长了。
4. 再举一个map嵌套使用的例子:矩阵的转置
use Data::Dumper(); my @matrix = ( [a,b,c,d],[e,f,g,h],[i,j,k,l] ); print Dumper(/@matrix ); my @transposed = map { $x = $_; [ map { $matrix[$_][$x] } 0 .. $#matrix ]; } 0 .. $#{$matrix[0]}; print Dumper(/@transposed);
上面的BLOCK里面,map的返回值是用方括号 *** 作符号构造匿名数组实现的。理解这一点就容易看懂代码了,这个匿名数组法常常被用来构造简单难懂的代码,常用伎俩:-)
总结以上是内存溢出为你收集整理的perl map函数全部内容,希望文章能够帮你解决perl map函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)