1.Perl中的哈希

  高效快捷, 没有大小限制. 大哈希一样很快!

  命名: 和Perl其他标识符一样, 同时拥有自己的的名字空间.  $roger{"sex"} 和 $roger没有关系

  赋值: 对已存在的哈希赋值会覆盖原有值. 哈希元素会因赋值而产生(赋值就是"插入"哈希表中),  访问不存在值就会得到undef

$roger{'name'}="roger";
if($roger{'sex'} == undef){
print "undef\n";
}

2.建立hash   (对整个hash的引用使用%,对哈希变量的引用使用$)

# 下面3种方法等效
$roger{'name'} = 'roger'; $roger{'sex'}='male'; $roger{'age'}=;
%roger = ("name","roger","sex","male","age","21"); #在(数组)列表上下文中自动转换为键值对保存在roger表中
%roger = ( #hash 也可以是词法变量,可以在前面加my操作符, 同时也是在列表上下文中
"name" => "roger",
"sex" => "male",
"age" =>
);
print $roger{"name"};

  哈希还可以通过已有哈希来建立

$roger{'name'} = 'roger'; $roger{'sex'}='male'; $roger{'age'}=; $roger{}="young";
print $roger{}."\n"; #键还可以是数值, 实际上在Perl中并不区分,因为只有3种基本数据类型(标量,数组和哈希),所以键值为标量即可
%Roger = %roger;
print $Roger{"sex"}."\n"; #male
# 键值对反转
%loger = reverse %roger;
print $loger{}."\n"; #通过原来的值来访问键,但是要保证原理的值唯一, 否则会有覆盖发生,得不到预期结果

  同样, %roger{'name'}也能得到正确结果, 但是$roger{'name'}是更好的访问方式.

  胖箭头左边的任何裸词都能自动引用,可以不需要加引号, 另外, 哈希键所在的花括号也有自动引用能力, 也可以使用裸词(裸词: 字母, 数字 和下划线的序列, 可以用+-开头,但不能使用数字开头)

%roger = ( #hash 也可以是词法变量,可以在前面加my操作符, 同时也是在列表上下文中
name => "roger",
sex => "male",
age => ,
=> , # 最后一个逗号可选加入, 根据裸词的定义, 这个好像不是裸词? 不知为啥也可以!
);
print $roger{name}."\n";
print $roger{}."\n";

3. 哈希函数

   keys()  和  values() 函数:  只要在中间没有对哈希进行增删改, 那么对应的键值顺序一致, 但是不一定是存进去的顺序.

    在列表上下文中, 返回了数组:

%hash = (
"a" => ,
"b" => ,
"c" => ,
);
@keys = keys(%hash);
@values = values(%hash);
print $keys[]."\n";
print $values[]."\n";

    在标量上下文中, 返回了列表的大小:

%roger=("a"=>,"b"=>,"c"=>);
$count = keys %roger; #因为是标量上下文哦
print $count; #

    结合数组理解一下列表上下文和标量上下文

@roger = (..);
print @roger; #列表上下文,因为print的参数是一个列表,输出没有空格分隔元素的列表
printf("\n");
print @roger."\n"; #标量上下文, 因为相当于数组插值(后面有字符串连接着), 所以需要一个标量,输出数组大小
print "@roger\n"; #列表上下文,把数组的所有元素分别插值,输出空格分隔元素的列表

   each() 函数

$roger{'name'} = 'roger'; $roger{'sex'}='male'; $roger{'age'}=; $roger{}="young";
# 每次对同一个哈希调用each, 就返回下一组键值对,类似迭代器
while(($key,$value) = each %roger){
print "$key => $value\n";
}

    exists()  delete() 函数

$roger{'name'} = 'roger'; $roger{'sex'}='male'; $roger{'age'}=; $roger{}="young";
if(exists $roger{"name"}){
print $roger{"name"}."\n";
}
print $roger{"age"}."\n";
delete $roger{"age"};
if(! exists $roger{age}){
print "age not exists!\n"
}

  哈希不支持整体内插, 但是支持单个元素内插到双引号中.

4.  %ENV  获取环境哈希

  可以使用  print $ENV{PATH}; 打印系统路径变量;  只要在程序外设定了任何环境变量, 就可以用  print $ENV{CHARACTER}; #CHARACTER是环境变量名  获取.

Perl 学习笔记-哈希的更多相关文章

  1. perl学习笔记——哈希

    哈希 哈希是一种数据结构,它和数组的相似之处在于可以容难任意多的值并能按需取用,而他和数组的不同在于索引的方式,数组是以数字为索引而哈希则是以名字为索引. 哈希的键是唯一的,哈希的值可以重复. 哈希的 ...

  2. 【Redis】命令学习笔记——哈希(hash)(15个超全字典版)

    本篇基于redis 4.0.11版本,学习哈希(hash)相关命令. hash 是一个string类型的field和value的映射表,特别适合用于存储对象. 序号 命令 描述 实例 返回 HSET ...

  3. Perl学习笔记(3)----遍历哈希表的一个容易疏忽的地方

    今天做 Google的 Code Jam 上的一道题目:https://code.google.com/codejam/contest/351101/dashboard#s=p2,用Perl语言解答的 ...

  4. Perl 学习笔记-标量数据

    最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...

  5. perl 学习笔记

    一:基础 1:安装perl      centos: yum -y install perl       官网:https://www.perl.org/      升级到5.22:先下载,执行./i ...

  6. Perl 学习笔记-目标操作

    1.在目录树中移动. 程序运行时会以当前工作目录作为相对路径的起点, 可以使用  chdir 操作符改变当前目录: chdir "/etc" or die "Can't ...

  7. Perl 学习笔记-高级控制结构

    1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码;  unless(<condition>){code...;} 等价于  if(<con ...

  8. Perl 学习笔记-正则表达式处理文本

    1.使用正则表达式替换文本  s///  s/<pattern>;/<replacement>;/ 如果匹配失败, 则什么也不会发生, 变量也不受影响. 返回布尔值, 替换成功 ...

  9. Perl 学习笔记-列表和数组

    笔记来自<<Perl语言入门第5版>> 1. Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示 ...

随机推荐

  1. SpringMVC之八:基于SpringMVC拦截器和注解实现controller中访问权限控制

    SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...

  2. ehcache介绍

    EHCache是来自sourceforge(http://ehcache.sourceforge.net/) 的开源项目,也是纯Java实现的简单.快速的Cache组件.EHCache支持内存和磁盘的 ...

  3. 杂项-Server:Serv-U

    ylbtech-杂项-Server:Serv-U Serv-U FTP Server,是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/2K等全Windows系列.可以设定多个FTP服 ...

  4. 安装SQL Servre2000时提示“command line option syntax error! type command /? for help”

    问题: 当程序正在安装ms数据访问组件时,弹出错误提示框:command line option syntax error,type command/? for help,点击确定继续:到了程序正在安 ...

  5. py基础2--列表,元祖,字典,集合,文件

    本节内容 列表.元祖操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 三元运算&生成式&成员运算&解压法&队列堆栈&数据类型转换 1. 列表操作 ...

  6. 逻辑IO及当前模式读和一致性读的总结杂记

    逻辑IO 逻辑读(确切是指db get之read不是consistentget之read):就是服务器进程从SGA上的buffercache(高速缓存)区域(先)根据SQL语句解析过程所获得的要操作的 ...

  7. sublime text安装插件

    http://www.sublimetext.com/ 安装Sublime Text 2插件的方法: 1.直接安装 安装Sublime text 2插件很方便,可以直接下载安装包解压缩到Package ...

  8. 史上最详细的HashMap红黑树解析

      简介:请允许我当一回标题党.好了,言归正传,本篇主要内容便是介绍HashMap的男二号——TreeNode(男一号还是给Node吧,毕竟是TreeNode的爷爷,而且普通节点一般来说也比TreeN ...

  9. bower的安装和使用

    第一 下载node 网址https://nodejs.org/en/ 安装过程基本直接“NEXT”就可以了. 安装完成之后,我们先检测下NodeJS是否安装成功,cmd命令行中键入: node -v ...

  10. Tkinter Toplevel

       Tkinter Toplevel:顶层部件的工作,直接由窗口管理器管理的窗口.他们不必在它们上面的父widget   顶层部件的工作,直接由窗口管理器管理的窗口.他们不必在它们上面的父widge ...