Perl基础 Perl复杂数据结构

开发 架构
Perl复杂数据结构的概念你是否熟悉,本文向大家简单介绍一下,Perl能使复杂的事情变得简单,并且Perl让你可以操作简单的标量。

本文和大家重点讨论一下 Perl复杂数据结构的概念。Perl能使复杂的事情变得简单,方法是让你假装那些复杂的数值实际上是简单的东西.换句话说,Perl让你可以操作简单的标量,而这些标量碰巧是指向复杂数组和散列的引用.

Perl复杂数据结构

  数组和散列是易用、简单平面的数据结构,很不幸,现实总不能如人所愿。很多时候你需要使用很难、复杂而且非平面的数据结构。Perl能使复杂的事情变得简单。方法是让你假装那些复杂的数值实际上是简单的东西.换句话说,Perl让你可以操作简单的标量,而这些标量碰巧是指向复杂数组和散列的引用.在自然语言中,我们总是用简单的单个名词来表示复杂的难以理解的实体,比如,用"政府"来代表一个关系复杂的硬壳等等.
  
  继续讨论上个例子,假设我们想讨论Jacob的妻子而不是Adam的,而Jacob有四个妻子(自己可别这么干)。为了在Perl中表示这个数据结构,我们会希望能将Jocob的四个妻子当成一个来处理,但是我们会遇到一些问题。你可能认为我们可以用下面的语句来表示:
  
  $wife{"Jacob"}=("Leah","Rachel",'Bilhah","Zilpah");#错
  但是这并不能象你希望的那样运转,因为在Perl中括弧和逗号还不够强大,还不能将一个列表转换成为标量(在语法中,圆括弧用于分组,逗号用于分隔)。你需要明确地告诉Perl你想将一个列表当成一个标量。[]中括弧能够实现这个转换:
  
  $wife{"Jacob"}=["Leah","Rachel","Bilhah","Zilpah"];#正确
  这个语句创建了一个未命名的数组,并将这个数组的引用放入散列的元素$wife{“Jacob”}中.因此我们有了一个命名的散列,其中包含了一个未命名的数组.这就是Perl处理多维数组和嵌套数据类型的方法.同普通数组和散列的赋值方法一样,你可以单独对其进行赋值:   

  1.  $wife{"Jacob"}[0]="Leah";  
  2.   $wife{"Jacob"}[1]="Rachel";  
  3.   $wife{"Jacob"}[2]="Bilhah";  
  4.   $wife{"Jacob"}[3]="Zilpah";  

  你可以从上边看出,这看起来象一个具有一个字符串下标和一个数字下标的多维数组.为了更多了解树状结构,如嵌套数据结构,假设我们希望不仅能列出Jocob的妻子,而且同时能列出每个妻子的所生的儿子,Perl复杂数据结构在这种情况下,我们希望将散列结构也当成一个标量,我们可以使用花括弧来完成(在每个散列值中,象上个例子一样用中括弧表示数组,现在我们有了一个在散列中的散列中的数组)。
  
  $kids_of_wife{"Jacob"}={
  "Leah"=>["Reuben","Simeon","Levi","Judah","Issachar","Zebulun"],
  "Rachel"=>["Joseph","Benjamin"],
  "Bilhah"=>["Dan","Naphtali"],
  "Zilpah"=>["Gad","Asher"],};

  同样,我们也可以象下面这样表示:    

  1. $kids_of_wife{"Jacob"}{"Leah"}[0]="Reuben";  
  2.   $kids_of_wife{"Jacob"}{"Leah"}[1]="Simeon";  
  3.   $kids_of_wife{"Jacob"}{"Leah"}[2]="Levi";  
  4.   $kids_of_wife{"Jacob"}{"Leah"}[3]="Judah";  
  5.   $kids_of_wife{"Jacob"}{"Leah"}[4]="Issachar";  
  6.   $kids_of_wife{"Jacob"}{"Leah"}[5]="Zebulun";  
  7.   $kids_of_wife{"Jacob"}{"Rachel"}[0]="Joseph";  
  8.   $kids_of_wife{"Jacob"}{"Rachel"}[1]="Benjamin";  
  9.   $kids_of_wife{"Jacob"}{"Bilhah"}[0]="Dan";  
  10.   $kids_of_wife{"Jacob"}{"Bilhah"}[1]="Naphtali";  
  11.   $kids_of_wife{"Jacob"}{"Zilpah"}[0]="Gad";  
  12.   $kids_of_wife{"Jacob"}{"Zilpah"}[1]="Asher";  

  可以从上面看出,在嵌套数据结构中增加一层,就像在多维数组中增加了一维。在Perl内部表示是一样的,但是你可以用任何一种方法来理解。
  
  这里最重要的一点就是,Perl可以用简单的标量来代表Perl复杂数据结构。Perl利用这种简单的封装方法构建了基于对象的结构。当我们用下面的方法调用Camel对象的构造函数的时候:
  
  $fido=newCamel"Amelia";
  我们创建了一个Camel对象,并用标量$fido来代表。但是在Camel对象里面是很复杂的。作为优秀的面向对象的程序员,我们不想关心Camel对象里面的细节(除非我们是实现Camel类方法的人)。但是一般说来,一个对象的组成中会有一个包含对象属性的散列。例如它的名字(本例子中,是“Amelia”而不是“fido”),还有驼峰的数量(在这里我们没有明确定义,因此使用缺省值1,和封面一样)。

【编辑推荐】

  1. Perl变量中Perl数组概念详解
  2. Perl面向对象编程的两种实现和比较
  3. Perl语言中的五大变量类型
  4. 深入解析Perl内部函数的使用
  5. Perl程序设计中的Perl用户函数(子程序)
责任编辑:佚名 来源: hackbase.com
相关推荐

2010-07-20 16:05:07

Perl包

2010-07-13 16:34:34

Perl 哈希表

2010-07-16 10:38:24

Perl关联数组

2010-07-16 10:44:54

Perl数组

2010-07-21 13:59:59

Perl引用

2010-07-19 09:52:04

Perl标量

2022-02-22 19:04:01

Perl编程语言

2010-07-15 10:22:23

Perl控制结构

2010-07-16 09:50:23

Perl控制结构

2010-07-16 10:53:30

Perl基础

2010-07-16 11:22:31

Perl

2010-07-21 14:18:27

Perl函数

2010-07-19 11:07:13

Perl控制结构

2010-07-20 14:41:55

Perl语法

2010-07-19 10:01:57

Perl函数

2010-07-21 13:27:06

Perl模式匹配

2010-07-21 09:50:51

Perl调试

2010-07-13 09:50:55

Perl数组

2010-07-13 12:50:47

Perl变量

2010-07-21 14:08:28

Perl命令行
点赞
收藏

51CTO技术栈公众号