神奇的Perl-哈希与数组(1)
声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
神奇的Perl- 哈希与数组
1. use strict和use warnings
1.1 要求
通常来说,这2个命令总是同时使用,并且书写在程序的最前面。
1.2 作用
程序员有时会输错变量名、函数名等, use strict和use warnings对程序员进行了约束,避免了这类简单错误发生,也许算是懒惰的程序员的恶梦吧,毕竟会导致多敲N次键盘。
笔者认为,与其将大量时间花在程序调试排错上,不如约束程序员,使他们少犯简单错误,在工程规模较大的情况下,这种结束效果非常明显。比如以下test.pl的程序(因为程序员疏忽,将$sum+=$l中的$i输成了$l)
#test.pl
for ($i=1;$i<100;$i++){
$sum+=$l;
}
print $sum;
程序输出0,但这并不是程序需要的求和结果。
使用use strict和use warnings后,程序改成如下:
#test.pl
use strict;
use warnings;
my $i;
my $sum;
for ($i=1;$i<100;$i++){
$sum+=$l;
}
print $sum;
程序提示错误:
Global symbol "$l" requires explicit package name at test.pl line 7.
Execution of test.pl aborted due to compilation errors.
得益于use strict和use warnings,不习惯使用变量前事先声明的懒惰程序员犯的错误被轻易发现了。
1. 哈希
2.1 什么是哈希
哈希是一种数据结构,以数字、字符串等为索引将值存放到其中,或者从中取回值。哈希把任意长度的输入(键),通过散列算法,变换成固定长度的散列值输出,将输入视为索引,将输出视为给索引分配的唯一内存地址,地址里存放的是这个索引代表的内容。
2.2.1 访问语法
2.2.1.1 读取哈希(hash) 元素
语法如下:
$hash变量名{哈希健}
如:
$studentage=$age{张三};
2.2.1.2 修改或增加哈希(hash)元素
语法如下:
$hash变量名{哈希健}=健值。
如:
$age{张三}=28;
2.2.1.3 访问不存在的hash健值
不存在的hash健值的访问结果是undef,undef即未定义。
2.2.2 哈希变量声明
对于使用了use strict语句的程序,必须事先声明变量,语法如下:
变量范围 %哈希变量名
如:
my %studentage;
2.2.3 哈希拷贝与反转
哈希之间的拷贝语法如下:
%新变量名 = %被拷贝的变量名;
如:
%newstudentage=%studentage;
哈希反转语法如下:
%newstudentage=reverse %studentage;
哈希的反转指哈希键和哈希值调换,例如:
my %student;
my %newstudent;
%student=("张三"=>"上海","李四"=>"广州","王五"=>"北京");
print "$student{'张三'}\n";
%newstudent=reverse %student;
print "$newstudent{'上海'}\n";
输出如下:
上海
张三
上述代码中,未反转之前,张三为键,上海为值,反转后,上海为键,张三为值。
2.2.4 哈希赋值
使用大箭头符号(=>)对HASH赋值,箭头左边是健,右边是值。
语法如下:
my %变量名=(
健名1=>健值1,
健名2=>健值2,
………..
……….
健名n=>健值n
)
如:
#perl3-1.pl
use strict;
use warnings;
#哈希赋值
my %studentage;
%studentage=(
"张三"=>19,
"李四"=>22
);
#访问哈希
print "张三:$studentage{'张三'}";
print "\n";
1. 哈希
2.1 什么是哈希
2.2.1 访问语法
2.2.2 哈希变量声明
变量范围 %哈希变量名
2.2.3 哈希拷贝与反转
%新变量名 = %被拷贝的变量名;
2.2.4 哈希赋值
上一篇: 详解HTTP协议简介
下一篇: Ubuntu上安装yaf扩展的方法