- 论坛徽章:
- 0
|
点号是一个operator
再看看map的用法
map
map BLOCK LIST
map EXPR, LIST
这个函数为 LIST 里的每一个元素计算 BLOCK 或者 EXPR(在本地把 $_ 设置为每个元素)并且返回由每次计算的结果组成的列表。它在列表环境里计算 BLOCK 或者 EXPR,因此 LIST 里的每个元素都可以映射成零个,一个,或者更多个返回值里的元素。这些东西都填充到一个列表中去了。比如:
@words = map { split ' ' } @lines;
把一个行组成的列表分裂成一个单词列表。但是通常在输入值和输出值之间是一一映射的:
@chars = map chr, @nums;
把一个数字列表转换成对应的字符。而下面是一个一对二映射的例子:
%hash = map { genkey($_) => $_ } @array;
它只是下面程序的一种有趣的写法:
%hash = ();
foreach $_ (@array) {
$hash{genkey($_) } = $_;
}
因为 $_ 是一个到该列表数值的别名(隐含引用),所以这个变量可以用于修改数组的元素。这样做是允许并且是有用的,不过,如果 LIST 不是一个命名数组,那么它可能导致非常奇怪的后果。这种情况下使用一个普通的 foreach 循环可能更清晰一些。又见 grep;map 和 grep 的不同在于:map 返回一个由所有成功计算 EXPR 后得到的结果组成的列表,而 grep 返回一个由所有对 EXPR 计算为真的 LIST 的值组成的列 |
|