perl编程_13 引用与结构.PDF
文本预览下载声明
下载
第1 3学时 引用与结构
如果P e r l是你使用的第一个编程语言,那么本学时将会使你感到颇有兴趣。在大多数编程
语言中,你会发现一个概念,即一组数据实际上可以是对另一组数据的引用。有时这些引用
称为指针(在p a s c a l或C语言中),有时这种技术称为间接引用(在汇编语言中),而有些语言
则根本没有指针的概念(在 B A S I C或J a v a 中)。如果你以前从未使用过引用、指针或间接引用
等概念,那么可能必须多次阅读本学时讲解的某些部分的内容,否则会感到混淆不清。
P e r l也拥有这些特殊类型的值,不过在 P e r l 中,它们都称为引用。在 P e r l 中,引用可以用
于许多目的,但在本学时中,你要学习的是如何使用引用来调用带有多个参数的复杂函数和
如何创建复杂的数据类型,如列表的列表。
所谓引用,它非常类似老式图书馆中的卡片目录。目录中的每个索引卡指的是图书馆中
的一本书。卡片可以指明这本书是什么类型的书(比如小说、非小说、参考书等),并指明这
本书放在什么位置。有些卡片目录可能配有对同一本书的若干个引用,它们是不同种类的引
用,并且甚至可以参见该目录中的其他卡片。
P e r l 的引用类似卡片目录,可以指向各组数据。引用能够知道它指向的是何种类别的数据
(如标量、数组或哈希),也知道这些数据在什么地方。引用可以被拷贝,但不改变原始数据
的任何东西。对于同一组数据,可以进行多次引用。实际上一个引用可以指向其他的引用。
请牢记下面这些要点,慢慢阅读下面几页内容,并且在我们介绍有关的问题时保持清醒
的头脑:
• 引用的基本概念。
• 引用的常见结构。
• 运用所有这些概念而建立的一个简要代码例子。
13.1 引用的基本概念
使用赋值运算符,可以创建和赋值一个普通的标量变量,如下所示:
在这个代码段建立后,可以创建一个称为 $ a 的标量变量,它包含字符串“ S t o n e s ”。到现
在为止,一切都很正常。这时,在计算机中的某个地方有一个标为 $ a 的位置,它包含了该字
符串,如下图所示:
如果将标量$ b赋予$ a ,比如$ a = $ b ,那么会产生该数据的两个拷贝,它们使用两个不同的
名字,如下图所示:
如果你想要两个独立的数据拷贝,那么拥有两个拷贝是很好的。但是,如果想让 $ a和$ b
都引用同一组数据,而不是引用一个数据拷贝,那么必须创建一个引用。所谓引用,它只是
148使用第二部分 高 级 特 性
下载
指向一组数据的指针,并不包含实际数据的本身。该引用通常存放在另一个标量变量中。
若要创建对某个既定变量的引用,可以在该变量的前面加上一个反斜杠。例如,若要创
建称为$ r e f 的对$ a 的引用,只需要像下面这样将引用赋予 $ r e f 即可:
这个赋值创建了类似下面这样的条件:
$ r e f并不包含用于它自己的任何数据,它只是对 $ a 的一个引用。变量$ a根本没有改变,它
仍然可以照常被赋值( $ a = “F o o ”)或显示(print $a) 。
变量$ r e f现在包含对 $ a 的引用。不能简单地对 $ r e f进行操作,因为它里边没有通常的标量
值。实际上,如果输出 $ r e f ,就会显示类似S C A L A R ( 0 x 0 0 0 0 ) 的信息。若要通过$ r e f获得$ a 中
的值,必须间接引用$ r e f 。间接引用可以被视为上面的方块图中按箭头方向的引用。若要通过
引用$ r e f来输出$ a 的值,你可以像下面这样使用另一个 $ :
在上面的代码段中, $ r e f 当然包含了引用。增加的一个 $告诉P e r l ,$ r e f 中的引用指的是一
个标量值。 $ r e f 引用的标量值被取出并输出。
也可以通过引用来修改原始值,这是你对数据拷贝所不能进行的操作。下面这个代码用
于修改$ a 中的原始值:
这项修改形成了类似下面这样的引用关系:
如果你使用$ r e f而不是$ $ r e f
那么存放在 $ r e f中的引用将被撤消并被
显示全部