基本用法
# 初始化 %h为空数组
%h = {};
# 用数组初始化%h为 a=>1, b=>2
%h = ('a', 1, 'b', 2);# 意义同上,只是另一种更形象化的写法。
%h = ('a'=>1, 'b'=>2);#如果key是字符串,可以省略引号。
下面这行和上面那行是一样的%h = (a=>1, b=>2);
# 用{}来访问print "
$h{a}\n"; # 打印1
$h{b} = '2b';
print "$h{b}\n"# 打印2b
# 删除key用deletedelete $h{b}; # 从$h删除'b'
清空hash
undef %h
得到hash的所有键值 #
得到所有keys,顺序取决于hash函数,或者说是乱序
@all_keys = keys %h;
# 所有键值,是按hash的值从大往小排列的。值的比较是数字比较(比如说,10>9)@all_keys = sort{$h{$b}<=>$h{$a}} (keys %h);
# 所有键值,是按hash的值从小往大排列的。值的比较是数字比较
@all_keys = sort{$h{$a}<=>$h{$b}} (keys %h);
# 所有键值,是按hash的值从小往大排列的。值的比较是字符串比较#(比如说,'10' < '9')
@all_keys = sort{$h{$a} cmp $h{$b}} (keys %h);
判断hash是否包含key
exists($h{$key});
Hash的长度
想要知道一个hash存放多少数据
$hash_size = keys %h # 把%h的长度放到$hash_size中print scalar kes %h, "\n" # 打印%h的长度。这里用了scalar来返回数组长度。
遍历一个hash
while (my ($k, $v) = each %h) {print "$k ---> $v\n";}
foreach my $key (keys %$hostStatus) {
print "The key is $key and value is $hostStatus->{$key}.";
}
Reference引用
Reference类似于C/C++的指针
$h_ref = \%h; # 获得一个hash的reference
%aHash = %{$h_ref};# 把hash reference当成hash用
$value = $h_ref->{akey} # 这个和%h{akey}是一样的
传递hash到函数
一般都是传递一个reference到函数
%h = ();
$h{a}=1;
foo(\%h)
print $h{b}, "\n"; # 打印出2。这个值来自于函数foo()
sub foo {
my ($h) = @_;
print $h->{a}, "\n"; # 打印出1$h->{b} = 2;
}
函数返回hash,或者hash引用(hash reference)
函数可以返回hash
sub foo {
my %fh;
$fh{a} = 1;
return %h;
}
my %h = foo();
print "$h{a}\n"; #打印出 1
但是这样等于把整个hash从%fh复制到了%h,效率比较低。可以考虑返回hash的引用:
sub foo {
my %fh;
$fh{a} = 1;
return \%fh;
}
my $hr = foo();
print "
$hr->{a}\n" #打印出 1
my %h = %{foo()} # 如果就是想复制,也可以用这种方法
from:http://lmylvmingyue.blog.163.com/blog/static/46601701201031551731661/
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com