专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>perl>

perl的map函数用法实例(二)

百度收藏 QQ搜藏

继续上篇perl的map用法示例的讲解

4. 转换数组到hash:存储选中的CGI参数

hash通常是存储传递给程序或子函数的参数的最便利的方法,而map通常是创建这个hash的最便利的方法。

use CGI qw(param);
%params = map { $_, ( param($_) )[0] }
              grep { lc($_) ne 'submit' } param();

这里你可能要了解一下CGI模块的基本知识哦。param()调用返回CGI参数名的列表;param($_)调用返回指定的CGI参数名的值。假如param($_)返回某个CGI参数的多个值,那么( param($_) )[0]只取第一个值,以便hash仍被良好定义。

上述代码的意思是,将param()的结果作为输入列表,它的元素是多个CGI参数名,然后从这些参数名里grep出参数名不等于'submit'的,结果是一个临时列表,map的{ $_, ( param($_) )[0] }语句再次遍历这个临时列表,并获取到参数名,和对应的参数值,将结果赋给%params。所以%params里就存储了页面提交过来的,除了submit外的其他CGI参数名和参数值(只取第1个)。

这里它很巧妙结合用了map和grep,使代码显得很简洁。

5. 产生随机密码

@a = (0 .. 9, 'a' .. 'z');
$password = join '', map { $a[int rand @a] } 0 .. 7;
print "$password\n";

每次运行它会得到不同的结果,但长度总是8位,由0 .. 7这个决定。如下是可能的输出:

y2ti3dal

它是个随机值,也许你能用它来做密码。

这里,需要先明白几个函数,rand产生一个随机值,它后面的@a其实是个标量哦,表示@a数组的长度,rand @a的结果可能是个小数,所以再用int函数来取整。int rand @a的结果是个整数,它>;=0但小于@a的长度。所以$a[int rand @a]就表示从@a数组里随机取出一个字符了。0..7表示总共取8次,返回的结果再用join连接起来,就构成一个8位随机密码了呀。

当然,(0 .. 9, 'a' .. 'z')数组元素太少了,你可以修改它,使其包含大小写字符,数字和标点符号,这样密码强度就高些。

6. 从数组元素里剥离数字

不要在EXPR里修改LIST值。下面的做法是不好的:

@digitless = map { tr/0-9//d; $_ } @array; 

它虽然从数组元素里剥离了数字,但同样破坏了该数组,下面的做法是不错:

@digitless = map { ($x = $_) =~ tr/0-9//d;   
                   $x;
                 } @array;

它将tr的结果赋给临时变量$x,并返回$x的值,这样就保护数组。

7. 打印"just another perl hacker",让你晕得团团转,比较无聊的用法。

print map( { chr }
           ('10611711511603209711011111610410111' .
           '4032112101114108032104097099107101114')
           =~ /.../g
         ), "\n";

打印的结果是:
just another perl hacker

chr函数将单个数字转换到相应的ASCII字符。()=~/.../g语法以3个数字长度为单位,分割数字串到新的串列表。

上一篇:perl的map函数及用法示例(一) 下一篇:perl的map函数用法实例(三)

power by soyo123 2007-2008