善用foreach,map 和 grep

1. 通过foreach来进行列表元素的只读遍历

如果是仅仅要遍历列表中的所有元素,那么foreach循环就已经足够了。

另外,所有用到foreach的地方都可以改用等价的简写名for.

2.用map函数从现有列表延展出新列表

如果是从现有列表推导出新列表,请使用map函数。

my @sizes = map {-s} @files ;
my @sizes = map -s,@files;
my @stem = map {/(.*)\.txt$/} @files
my ($from) = map /^From:\s+(.*)$/,@message_lines ;

map 在做数据转换时,返回模式匹配操作符m//内部圆括号捕获的数据。 因为这是一个列表上下文,所以m//返回要么是没有匹配的空列表,要是匹配时找到的结果集而成的列表。

出于对性能的考虑,对原始列表内容改变的话,就改用foreach 循环。

使用map操作,要明确他的意义在于返回相应的列表数据,而不是用作控制结构做一堆杂事。

3.用foreach修订列表元素的内容

如果要修改列表元素的内容,请使用foreach 循环。 和map 和 grep 一样,循环体中的控制变量其实是列表当前元素的别名。所以修改变量,实际就是修改原始数据

#移除数组中各个元素的数字
foreach (@array) {tr /0-9//d }

#使用s/// De版本,更慢一些
foreach (@array) {s/\d//g}

4. 用grep 筛选列表元素

grep 比较特别,一般用于刷选列表元素或对元素计数

grep 块的第一个参数,不管是表达式还是代码块,都是标量上下文中的。

在标量上下文中,grep 返回的是符合条件的元素的个数,而不是元素列表。

原文地址:https://www.cnblogs.com/tjxwg/p/2939047.html