第3章 列表与数组

列表(list):标量的有序集合。--数据
数组(array):储存列表的变量。--变量
“标量-标量变量;列表-数组/列表变量”

1. 访问数组中的元素

数组元素是以连续的整数来编号的,从0开始,之后每个元素依次加1
如下所示

$fred[0] = "yabba";
$fred[1] = "dabba";

加入下标超过数组的尾端,对应的值将会是undef

2. 特殊的数组索引

  • 数组元素个数:$#array+1
  • 数组最后一个元素角标:$#array

3. 列表直接量

列表直接量:在程序代码中表示一列数据的写法。可以有小括号内用逗号隔开的一串数据表示,而这些数据称为列表元素

(1, 2, 3)
("fred", 4.5)

如果是某种规律的序列,不用逐个键入值。
范围操作符 ..,可用于自动创建它两侧标量值之间的所有取值,

(1..100)
(1..5) = (1, 2, 3, 4, 5)

范围操作符只能从小到大依次累加,因此不能从5..1

3.1 qw简写

qw表示”"quoted word", qw简写可以快速输入,免除反复键入引号和逗号。

("fred", "barney", "betty")
qw( fred barney betty)

定界符(delimiter):可以用任何标点符号作为定界符。

3.2 列表的赋值

($fred, $barney, $dino) = ("flintstone", "rubble", undef);

  • 如果等号左边的变量个数不等于右边的个数时,会发生什么?
    多出来的值会被悄悄忽略掉
  • 如果变量的个数多于给定的列表值的个数时,会发生什么?
    多出来的变量将会被设成undef

当希望引用整个数组时,只要在数组名之前加上@字符(all of the)

@rocks = qw/ bedrock slate lava /;
@tiny = ( );
@rocks = @tiny; #将一个数组中的列表复制到另一个数组

3.3 pop和push操作符

pop操作符:提取数组末尾的元素并将此作为返回值;
push操作符:添加一个元素或一串元素到数组尾端。

split操作符:分割标量
join操作符:链接标量

3.4 shift和unshift操作符

shift操作符:提取一个元素到数组的开头;
unshift操作符:添加一个元素到数组的开头。

3.5 splice操作符

splice操作符:添加或移除数组中间的某些元素
splice可接受4个参数:

  • 第一个参数:要操作的目标数组
  • 第二个参数:要操作的一组元素的开始位置(如果仅是前两个参数,Perl会把从给定位置开始一直到末尾的全部元素取出来并返回)
  • 第三个参数:指定要操作的元素长度
  • 第四个参数:要替换的列表
    举例:
@array = qw(pebbles dino fred barney betty)
@removed = splice @array, 1, 2, qw(wilma); 
#删除dino和fred,@array变成qw(pebbles wilma barney betty);@removed编程qw(dino fred)

4. 字符串中的数组内插

和标量一样,数组的内容同样可以被内插到双引号引起的字符串中。

@rocks = qw{flintstone slate rubble};
print "quart @rocks limestone\n";
# 打印5种以空格隔开的石头名

5. foreach控制结构

foreach循环:遍历列表中的值,依次提取使用。

foreach $rock (qw/ bedrock slate lav /) {
print "One rock is $rock.\n";
}
#依次打印所有三种石头的名称

6. Perl最喜欢用的默认变量:$_

假如在foreach循环开头省略控制变量,Perl就会用它最喜欢用的默认变量$_。

foreach (1..10) {
print "I can count to $_!\n";
}
# 默认会用$_作为控制变量

6.1 reverse操作符

reverse操作符会读取列表的值,并按相反次序返回新的列表。
reverse只是返回倒序后的列表。

6.2 sort操作符

sort操作符会读取列表的值,依次按字符的内部编码顺序对它们排序。
排序仅按照ASCII码的大小进行。

6.3 each操作符

以前each只能用于提取哈希的键-值对,现在可以用到数组。
每次对数组调用each,会返回数组中下一个元素对应的两个值--数组索引与元素值。

7. 标量上下文与列表上下文(敲重点:最重要!!!)

上下文:如何使用表达式
当Perl在解析表达式时,要么希望它返回一个标量,要么希望它返回一个列表。表达式所在的位置,Perl期望得到什么,那就是该表达式的上下文。
举例:

42+something #这里的something必须是标量
sort something #这里的something必须是列表
@people = qw(fred barney betty)
@sorted = sort @people; #列表上下文:barney, betty, fred
$number = 42 + @people; # 标量上下文:42 + 3得45

7.1 在标量上下文中使用产生列表的表达式

某些表达式在标量上下文中不会返回任何值。如sort,总是返回undef;reverse是把列表每一个字符做逆序处理。

$fred = somthing; #标量上下文
@pebbles = something; #列表上下文
($wilma, $betty)= something; #列表上下文
($dino) = something; #还是列表上下文

7.2 在标量上下文中使用产生标量的表达式

如果表达式求值结果为标量值,则自动产生一个仅含此标量值得列表

7.3 强制指定标量上下文

scalar伪函数强制使用标量

8. 列表上下文中的

  • 列表中的操作符,返回的是所有剩下行的内容,一行一个元素,直到文件结尾。
  • 标量中的操作符,返回的是输入数据的下一行内容。

你可能感兴趣的:(第3章 列表与数组)