Perl中的骆驼精神

Perl中的哈希数据结构。

哈希是一种数据结构,由一对对的键(keys)--值(values)对来组成。

这些键和值都是任意的标量,但键总会被转换成字符串而且必须是唯一的字符串。

访问哈希元素,    $hash{$some_key}    ##和访问数组的做法类似,只是使用了花括号{}而非方括号[]。

访问哈希表中不存在的值得到undef。

$family_name{‘barney‘} = ‘rubble‘        ##完成对某一哈希元素的单一赋值

访问整个哈希,    %family_name      ##此时哈希被转换成列表,列表中的元素为键--值对。

%family_name = (‘foo‘, 35, ‘bar‘, 12.4);

my %new_hash = %old_hash     ##整个hash的赋值,会先将hash分解为键值对,

后在将键值对合并为hash。所以前后顺序可能改变。

还可以将hash写为如下的方式来进行赋值   my %last_name = (

‘fred‘  =>  ‘flintstone‘,

‘dino‘  =>  undef

);

=>称为胖箭头,来显式的指出其中的键值对,其中键的‘‘可以省略。  $score{‘fred‘}也可以直接简写为$score{fred}。

哈希中的函数。

keys和values分别返回hash中的键列表和值列表。my @k = keys %hash;      my @v=values %hash;

在标量上下文中,分别返回键元素和值元素的个数。

if(%hash)     {print "....";}         ##在标量上下文,只要hash中有至少一个键值对,就返回真。

each函数,从哈希中返回一组键值。

while ( ($key, $value) = each %hash ) {print "....";}   ##在while中时标量上下文,返回2或0.

exists函数,检查哈希中是否存在某个键。

if (exists $book{"dino"})  {print "....";}

delete函数,删除哈希中的某个键值,不是赋值undef,而是直接删除。

delete $books{$person};

不可以在双引号内,直接内插整个hash。

foreach $persons (sort keys $books)

if( $books($persons) )  {print "$person has $books{persons}";}         ##只可以这样完成单个哈希的内插

时间: 2024-10-08 09:40:10

Perl中的骆驼精神的相关文章

Perl中的骆驼精神(三)

Perl中读取标准输入:<STDIN> foreach (<STDIN>)  { print "I saw $_";} 钻石操作符<>:它的参数来源于@ARGV数组. 先检查@ARGV数组,如果为空,则从标准输入流输入.@ARGV的值可以来自命令行,也可以自己赋值. ./program  fred  barney betty     #@ARGV的值便是命令行后的三个文件. while (<>)   {  chomp;   print &

Perl的骆驼精神(二)

在Perl中可以自己创建子程序(Subroutine): 关键字sub,子程序名以及用花括号封闭起来的代码块. sub  marine { ... } 子程序名与标量的命名空间是不同的两个部分. 子程序的返回值:最后一次运算的表达式即是默认的返回值.也可以用return来显式的返回,这样之后的语句不会执行. 在标量上下文返回的会是标量,在列表上下文返回的也是列表. 子程序中的参数:子程序内部可以使用@_,$_[1],$_[2],,,这样的变量来表示.@_变量是子程序私有变量,递归调用时,不会出错

Perl的骆驼精神(一)

Perl语言中的大部分语句表达式后都紧接一个分号,分隔不同的Perl语句. perl解释器能一次完成编译和运行这两个动作. perl通过一对反引号"``"来表示运行外部命令. 标量(scalar)包括数字和字符串两部分. 在perl内部按“双精度浮点数”的格式来存储数字,整型常量也会被转换成等效的浮点数. perl允许在数字直接量间插入“_”分隔符.而且对于十进制(decimal)之外的数.八进制(octal)以“O”开头. 十六进制(hexadecimal)以“0x”开头.二进制(b

Perl中的真与假

Perl认为真值是自明的(self-evident), 表示任何事物的真值都可以计算.Perl以实用的方式来定义真值,即一个实体的真值取决于这个实体的类型.Perl总是乐观的认为:这个世界上真的东西远比假的东西多的多. Perl区别与任何其他计算机语言,Perl是语言学家创造的,而语言的意思离不开上下文语境,所以Perl中的真值都可以在标量(标量$与数组@类似于英文中的单数与复数, book 与 books的区别, 真值在现实世界中,应该就是单数,所以是标量)计算,除此之外,不会做任何类型的强制

[Perl系列—] 2. Perl 中的引用用法

Perl 中的引用,为什么要使用引用? 对于熟悉C语言的开发者来说, 指针这个概念一定不陌生. Perl 的引用就是指针,可以指向变量.数组.哈希表甚至子程序. Perl5中的两种Perl引用类型为硬Perl引用和符号Perl引用.符号Perl引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号Perl引用就象文件名或UNIX系统中的软链接.而硬Perl引用则象文件系统中的硬链接. Perl4只允许符号Perl引用,给使用造成一些困难.例如,只允许通过名字对包的符号名哈希表(名为_

Perl中Schwartzian转换问题

Perl中著名的Schwartzian转换,其产生背景主要涉及到排序问题: 比如说,根据文件名以字母顺序排序,代码如下: use strict; use warnings; my @files = glob "*.xml"; #perl中文件操作符glob提供相当于shell中的通配符的功能 my @sorted_files = sort @files; #sort(),排序,默认是字母顺序排序 比如说,根据文件名长度排序,其代码如下: use strict; use warnings

Perl中的正则表达

前几天用到了Perl语言,主要看了一下Perl中的正则表达式,在各种网页语言中,正则表达式在处理字符串的时候十分有用,所以这里就简单说一下在Perl中正则表达式的应用. 先上代码 1 #!/usr/bin/perl -w 2 #use utf8; 3 #use encoding "gb2312"; 4 5 open(DATA,"<test2.txt") or die "read error"; 6 7 open(OUT,">

Perl中的特殊内置变量详解

#!/usr/bin/perl -w @array = qw(a b c d); foreach (@array) { print $_," "; } 例子的作用就是定义一个数组并把其中的元素打印出来,这里需要注意的是foreach循环部分,foreach循环的标准格式应该是: foreach $element (@array){ ...... } 其中数组@array将其中的元素依次赋值给$element,但是在上面那个程序中,我并没有这样做,在程序中,我就使用到了perl中内置的一

Perl中判断数组或hash为空

Perl中没有bool类型 perl中没有bool类型,所有的判断都是通过数字类型和字符串类型来进行的. 哪些类型为false 标量只有三种,数字0,空字符串"", 字符串'0'("0"). 矢量有空数组,空哈希. 判断数组或哈希为空 和标量一样,直接将数组或哈希放到if语句中即可 my @list = () ;if(@list){ print "Not empty!\n" ;} my %hash = () ;if(%hash){ print &