您的位置:技术中心首页 > 工具学习 >> Perl >> 《Learning Perl》学习笔记 -- 第三章 列表和数组

《Learning Perl》学习笔记 -- 第三章 列表和数组

作者:未知   时间:2007-10-21 08:31:24  来自:网上转载  浏览次数:0  文字大小:【】【】【

本章讲述了列表和数组的概念、针对列表和数组的一些运算符和函数,并着重阐明了Perl中重要的“上下文”的概念。

1.列表和数组的概念

列表(list):是一个有序的标量集合;

数组(array):是一个包含列表的变量。

因此,简单地说,列表是数据,而数组是变量。

在Perl中不需要事先定义数组的大小,数组的大小总是可以根据需要自动扩展和收缩,没有被赋值或预定义的数组元素其值为undef。

1.1 访问数组及数组元素

对整个数组的访问很简单,在数组名前面加上@符号即表示整个数组,如@array。

使用索引访问数组元素,索引从0开始,逐渐递增,和C语言相同。

譬如数组名为array,则访问数组元素的方式为:$array[index]。

一个数组的最后一个元素的索引值为$#array(array为该数组名)。

Perl中还提供了一种从数组尾部访问数组元素的快捷方式:负的数组索引从数组的尾部算起。譬如,$array[-1]表示array数组的最后一个元素。

1.2 命名空间的概念

在Perl中,标量、数组和后面章节将要讲的散列的变量名是在不同的命名空间,你可以在同一个程序中定义一个名为Jerry的标量,名为Jerry的数组和名为Jerry的散列,而Perl不会讲它们搞混,因为它们本来就没在一个命名空间。要记住的是访问类型的变量,需要使用不同的前缀,可以认为前缀是命名空间的名字。以$开头的总是标量,以@开头的总是数组,以%开头的总是散列。

2.针对列表和数组的运算符和函数

2.1 ".."运算符

".."运算符表示一个区间,譬如1..5,表示从1到5的五个数字(1 2 3 4 5),一般用于列表或数组的赋值中。

2.2 qw快捷方式

qw表示“被括引的单词(quoted words)”,用于将一些字符序列赋值给列表或数组。

譬如要将fred, barney, betty,wilma和dino赋值给数组array,如果不用qw快捷方式,则需@array = ("fred", "barney", "betty", "wilma", "dino");这样需要键入大量的双引号。如果使用qw,则为@array = qw /fred barney betty wilma dino /;

注意qw快捷方式后面使用的分隔符是任意的,可以使用//,也可以使用!!或<>等,只要这两个匹配即可。

2.3 pop和push操作符

这两个操作符将数组当作堆栈来处理,pop用于从数组中弹出一个数据,push用于向数组中压入一个数据,针对的都是数组的尾部。

语法:$var = pop @array; push @array, $var;

2.4 shift和unshift操作符

这两个操作符的功能和pop与push类似,只是它们针对的是数组的头部进行操作。

语法:$var = shift @array; unshift @array, $var;

2.5 foreach控制结构

这个控制结构用于遍历整个数组,语法为:

foreach $var (@array) {};

要注意的是在遍历数组时,$var不是数组元素的拷贝,它就是数组元素本身,因此在{}中改变$var将改变array数组本身。但是,在遍历结束后,$var将恢复遍历数组前的值,即如果遍历数组前,$=10,则遍历完成后,$var仍然等于10。

2.6 reverse操作符

reverse操作符取一个列表的值(可以是来自一个数组),然后返回相反顺序的列表。记住reverse只是返回反序列表,它并不影响它的参数。因此,如果返回值不被赋给别的变量,它就毫无用处。

语法:@var = reverse @array;

2.7 sort操作符

sort操作符取一个列表的值(可以是来自一个数组),然后按照内部字符序进行排序。对ASCII字符串,就是按照ASCII字母表的顺序。sort和reverse相同,不影响它的参数,因此,你必须把你要的结果赋给别的变量。

3. 上下文的概念

上下文指的是一个表达式是在哪里出现的。它实际上就是一个简单的思想:一个给定的表达式在不同的地方,可能会有不同的含义。当Perl解析你的表达式时,它总是期望一个标量值或一个列表值或一个其它的值。Perl的期望就被称作表达式的上下文。对Perl中具体上下文的认识需要在实践中逐步领会。

譬如:

5 + something; # something必须是个标量

sort something; # something必须是个列表

一个有意思的现象是,当把一个数组赋值给一个标量时,这个标量获得这个数组的元素的个数,$var = @array;

有些时候需要强制使用标量上下文,这时可使用一个假函数scalar通知Perl,这里需要一个标量上下文。如scarlar @array;

在列表上下文中,从<STDIN>获得的数据存储在一个数组中,每行为一个数组元素。@lines = <STDIN>; #在列表上下文中读取标准输入

3.1 Perl的缺省变量$_

在任何需要使用标量变量的地方,都可以省略不写,而Perl会自动使用缺省变量$_表示这个变量。

譬如:

foreach (1..10) { #缺省使用$_

print "I can count to $_!n";

}

责任编辑:5life

更多相关 perl 的文章

《Learning Perl》学习笔记 -- 第一章 简介 [2007-10-21]
IC设计工程师的Perl语言学习之路 [2007-10-21]
在Perl中获取当前目录的完整路径 [2007-10-21]
在perl脚本中调用外部命令 [2007-10-21]
使用perl脚本分析timing report [2007-10-21]
本文共有0条评论,现在显示最新的5条。

栏目导航

电路基础
硬件语言
逻辑验证
电路综合
后端设计
可测设计
基本逻辑
制造封装
总线协议
说文解字
工具学习
数字滤波
闲话漫谈
数字锁相
设计杂项
低耗设计

站点最新

更多相关链接

  《Learning Perl》学习笔...
  《Learning Perl》学习笔...
  《Learning Perl》学习笔...
  在Perl中获取当前目录的...
  在perl脚本中调用外部命令
  使用perl脚本分析timing...

栏目最新

更多相关链接

  《Learning Perl》学习笔...
  《Learning Perl》学习笔...
  《Learning Perl》学习笔...
  在Perl中获取当前目录的...
  在perl脚本中调用外部命令
  使用perl脚本分析timing...

热点文章

更多相关链接

  使用perl脚本分析timing report
  在perl脚本中调用外部命令
  在Perl中获取当前目录的完整路径
  《Learning Perl》学习笔记 ...
  《Learning Perl》学习笔记 ...
  《Learning Perl》学习笔记 ...