设为首页 收藏本站
查看: 1270|回复: 0

[经验分享] 神奇的Perl-哈希与数组(1)

[复制链接]

尚未签到

发表于 2017-5-19 07:59:01 | 显示全部楼层 |阅读模式
声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
神奇的Perl-   哈希与数组

1.     use strictuse warnings

1.1         要求

 

通常来说,这2个命令总是同时使用,并且书写在程序的最前面。
1.2         作用

程序员有时会输错变量名、函数名等, use strictuse warnings对程序员进行了约束,避免了这类简单错误发生,也许算是懒惰的程序员的恶梦吧,毕竟会导致多敲N次键盘。
笔者认为,与其将大量时间花在程序调试排错上,不如约束程序员,使他们少犯简单错误,在工程规模较大的情况下,这种结束效果非常明显。比如以下test.pl的程序(因为程序员疏忽,将$sum+=$l中的$i输成了$l)
#test.pl
for ($i=1;$i<100;$i++){
$sum+=$l;
}
print $sum;
程序输出0,但这并不是程序需要的求和结果。
 
使用use strictuse 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 strictuse warnings,不习惯使用变量前事先声明的懒惰程序员犯的错误被轻易发现了。
 
1.     哈希

1          
2          

2.1          什么是哈希

哈希是一种数据结构,以数字、字符串等为索引将值存放到其中,或者从中取回值。哈希把任意长度的输入(键),通过散列算法,变换成固定长度的散列值输出,将输入视为索引,将输出视为给索引分配的唯一内存地址,地址里存放的是这个索引代表的内容。
2.2         访问哈希

1.1  

1  
2  

2.1  
2.2  

2.2.1 访问语法

1.    
2.    
2.1    
2.2    
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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378891-1-1.html 上篇帖子: 实例解析Perl语言中BEGIN和END用法 下篇帖子: Perl 读写excel 遇到空行,删除空行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表