#!/usr/bin/perl -wuse strict;my @array = (5, 'a', 'c', 10, 'b' );my @new_array = (map { $_*2 if m/\d/; } @array);print "@new_array \n" ;print $#new_array;#print join(",", @new_array), "\n";
map用法樣本2
1. 轉換檔名為檔案大小
@sizes = map { -s $_ } @file_names;
-s是個檔案測試操作符,它返回某個檔案的size。所以上面這句就返回@file_names數組裡每個檔案的大小,結果也是個數組。
2. 轉換數組到hash:找到某個數組值的索引
代替重複的搜尋數組,我們可以用map來轉換數組到hash,並通過hash關鍵字來進行直接尋找。如下的map用法相對於重複的數組搜尋,更簡單高效。
@teams = qw(Miami Oregon Florida Tennessee Texas Oklahoma Nebraska LSU Colorado Maryland); %rank = map { $teams[$_], $_ + 1 } 0 .. $#teams; print "Colorado: $rank{Colorado}\n"; print "Texas: $rank{Texas} (hook 'em, Horns!)\n";
列印結果是:
Colorado: 9
Texas: 5 (hook 'em, Horns!)
上述code容易理解哦,0 ..$#teams 是個列表,$#teams代表@teams最後一個元素的下標值(這裡是9),所以這個列表就是0-9這幾個數了。map遍曆上述列表,將每個列表元素臨時設定為$_,並對$_在中間的{}裡進行計算;{ $teams[$_], $_ + 1 },這裡每次計算後返回一個2元素的列表,列表結果是某個數組值和對應的數組下標加1,明白了呀?
由於對每個LIST元素進行計算時,都產生一個2元素的列表,所以總的map結果就可看作一個hash了。hash關鍵字就是數組元素,hash值是對應的數組下標加1。
http://www.chinaunix.net/jh/25/632333.html