学习的过程中,主要参考了Learning Perl和
http://blog.chinaunix.net/uid-9398085-id-2189657.html以及
http://www.cnblogs.com/itech/archive/2010/11/19/1881476.html
的博客。并表示感谢!
它使用一个列表,并对每个元素以一个指定的代码块或者表达式进行求值运算,然后返回所有结果的一个列表。
这段话说的非常好,他的作用如下:
列表=========》map处理===========》返回一个列表
他的操作对象是列表,得到的结构也是列表。
所以他的语法结构是这样的:
返回的列表=map (表达式或者块)要处理的列表
我们先来看一个表达式的例子:
use strict;
use warnings;
my @first_list;
my @second_list;
my $first_list;
my $second_list;
@first_list=qw/a b c d e f g/;
foreach $first_list(@first_list)
{
print $first_list;
}
print "\n";
@second_list = map uc,@first_list;
foreach $second_list(@second_list)
{
print $second_list;
}
print "\n";
这里用到的就是perl里面的一个uc命令,也就是转换大小写的命令。我们处理first_list以后得到的是一个新的列second_list;
得到的结果:
C:\WINDOWS\system32\cmd.exe /c perl "F:\perl\b.pl"
abcdefg
ABCDEFG
Hit any key to close this window...
我们再来看一个块的例子:
use strict;
use warnings;
my @data;
my @formatted_data;
my $formatted_data;
@data = (4.75,1.5,2,1234,6.9456,12345678.9,29.95);
@formatted_data = map{&big_money($_)} @data;
foreach $formatted_data(@formatted_data)
{
print $formatted_data."\n";
}
sub big_money
{
my $number = sprintf "%.2f",shift @_;#对number进行保留两位小数的处理
1 while$number =~ s/^(-?\d+)(\d\d\d)/$1,$2/;#每隔三位添加逗号
$number =~s/^(-?)/$1\$/;#添加美元符号
$number;
}
这里map后面跟的是一个子程序&big_money;
得到的结果如下:
C:\WINDOWS\system32\cmd.exe /c perl "F:\perl\b.pl"
$4.75
$1.50
$2.00
$1,234.00
$6.95
$12,345,678.90
$29.95
Hit any key to close this window...