找回密码
 注册
查看: 2672|回复: 0

perl语言哈希元素的存取

[复制链接]
发表于 2011-11-14 20:23:05 | 显示全部楼层 |阅读模式
要访问hash 元素,可以使用下面的语法:
$hash{$some_key}
这和访问数组元素的方法有些类似,这里下标(key)上使用的是花括号({}),而不是方括号([ ])◆。现在key 的表达式是字
符串,而非数字:
◆这里我们可以窥探到LarryWall 的设计思想:Larry 认为由于其和普通数组不同,则也应当使用和普通数组不同的符号。
$family_name{“fred”} = “flintstone”;
$family_name{“barney”} = “rubble”;
我们如下的书写代码:
foreach $person (qw<barney fred>){
print “I’ve heard of $person $family_name{$person}.\n”;
}
hash 的名字和Perl 中其它的标识符的命名规则是一样的(字母,数字,下划线组成,但不能由数字开头)。由于其属于不
同的名字空间,则像hash 元素$family_name{“fred”}和子程序&family_name 之间没有任何的关系。当然,没有理由将它们
命名成一样的,这会让读者困惑。但Perl 本身并不关心, 你是否将某个变量叫做$family_name,某个数组元素称为
$family_name[5]等。但人们通常不习惯,通过名字前面或者后面的符号来判断其具体的含义,虽然Perl 是这样做的。当在
名字前面是美元符号($),后面是花括号({}),则其为hash 元素。
当给hash 选择名字时,最好这样思考:hash 元素的名字和key 之间可以用for 来连接。如,“the family_name for fred is
flintstone(fred 的姓是flintstone)”。因此,hash 名为family_name,现在keys 和values 之间的关系就相当清楚了。
Hash 的key 可以是任意的表达式:
$foo = “bar”;
print $family_name{$foo . “ney”}; #输出“rubble”
当将某个值存储在已经存在的hash 元素中,以前的值会被覆盖:
$family_name{“fred”} = “astaire”; #将新值赋给已经存在的元素
$bedrock = $family_name{“fred”}; #得到“astaire”;以前的值丢失了
这和数组或标量变量中的情况是一样的。如果存放一个新值到$pebbles[17]或$dino 中,则以前的值被替换。如果将新值存
在$family_name{“fred”}中,则以前的值同样被替换掉。
可以通过赋值语句对hash 元素赋值:
$family_name{“wilma”} = “flintstone”; #新增一个key(也包括value)
$family_name{“betty”} .= $family_name{“barney”}; #创建一个新元素
这和数组或标量中的情形是一样的:如果以前没有$pebbles[17]和$dino,赋值后就有了。如果以前没有$family_name{“betty”},
则情况是一样的。
访问不存在的hash 元素得到undef:
$grantie = $family_name{“larry”}; #没有larry:得到undef
这同样和数组或标量中的情形类似; 如果$pebbles[17]和$dino 中没有值,则访问它们得到的结果为undef。如果
$family_name{“larry”}中没有存放值,则其返回undef。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 23:24 , Processed in 0.033807 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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