列表(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. 列表上下文中的
- 列表中的
操作符,返回的是所有剩下行的内容,一行一个元素,直到文件结尾。 - 标量中的
操作符,返回的是输入数据的下一行内容。