- 論壇徽章:
- 0
|
點(diǎn)號(hào)是一個(gè)operator
再看看map的用法
map
map BLOCK LIST
map EXPR, LIST
這個(gè)函數(shù)為 LIST 里的每一個(gè)元素計(jì)算 BLOCK 或者 EXPR(在本地把 $_ 設(shè)置為每個(gè)元素)并且返回由每次計(jì)算的結(jié)果組成的列表。它在列表環(huán)境里計(jì)算 BLOCK 或者 EXPR,因此 LIST 里的每個(gè)元素都可以映射成零個(gè),一個(gè),或者更多個(gè)返回值里的元素。這些東西都填充到一個(gè)列表中去了。比如:
@words = map { split ' ' } @lines;
把一個(gè)行組成的列表分裂成一個(gè)單詞列表。但是通常在輸入值和輸出值之間是一一映射的:
@chars = map chr, @nums;
把一個(gè)數(shù)字列表轉(zhuǎn)換成對(duì)應(yīng)的字符。而下面是一個(gè)一對(duì)二映射的例子:
%hash = map { genkey($_) => $_ } @array;
它只是下面程序的一種有趣的寫(xiě)法:
%hash = ();
foreach $_ (@array) {
$hash{genkey($_) } = $_;
}
因?yàn)?$_ 是一個(gè)到該列表數(shù)值的別名(隱含引用),所以這個(gè)變量可以用于修改數(shù)組的元素。這樣做是允許并且是有用的,不過(guò),如果 LIST 不是一個(gè)命名數(shù)組,那么它可能導(dǎo)致非常奇怪的后果。這種情況下使用一個(gè)普通的 foreach 循環(huán)可能更清晰一些。又見(jiàn) grep;map 和 grep 的不同在于:map 返回一個(gè)由所有成功計(jì)算 EXPR 后得到的結(jié)果組成的列表,而 grep 返回一個(gè)由所有對(duì) EXPR 計(jì)算為真的 LIST 的值組成的列 |
|