1.列表与数组的关系:列表是指标量的有序集合,而数组是存储列表的变量。
2.Perl中对于数组的访问和C语言一样,下标也是从0计数。数组变量的名称以字符@开头。
列表直接量可以由圆括号内用逗号隔开的一串数据表示,而这些数据就称为列表元素。例如:
(1, 3, 5) #包含1、3、5这三个元素的列表
("fred",4.5) #两个元素,"fred"和4.5
() #空列表--0个元素
(1..100) #从1到100步长为1构成的列表
最后的范围操作符(range operator) ..,实现把从左边的数字计数到右边,每次加一,注意:这个操作符只能用于递增。
使用qw(quoted word)简写来创建简单的单词列表(Perl会把里面当做单引号内的字符串来处理,所以也就不能使用\n之类的转义字符了,并且其中空白符都会被抛弃)。
据以上,下面的两种表示完全相同:
qw(fred barney betty wilma) #第一种表示
qw(fred
barney betty
wilma) #与上面的表示相同,但是看上去比较奇怪
前面的例子都是使用一对圆括号作为定界符,Perl允许你使用任何的标点作为定界符,但必须左右匹配!如:
qw(fred barney betty wilma)
qw!fred barney betty wilma!
qw/fred barney betty wilma/
qw#fred barney betty wilma#
对列表赋值,多出来的值会被忽略;
如果变量个数多于列表值的个数,多出的变量会被设成undef。
pop操作符取出数组中最后一个元素并且将它作为返回值返回;
push操作符将一个元素添加到数组的尾端。
@array = 1..5; #(1,2,3,4,5)
$fred = pop @array; #fred变成5,@array变成(1,2,3,4)
pop @array; #@array变成(1,2,3)
@array = 1..5;
push @array,6; #@array现在是(1,2,3,4,5,6)
shift操作符取出数组中的第一个元素并且把它作为返回值返回;
unshift操作符将一个元素添加到数组的头部。
@array = qw#dino fred barney#;
$m = shift @array; #$m变成dino,@array现在是("fred","barney")
@array = qw#dino fred barney#;
unshift @array,"hello";@array现在是("hello","dino","fred","barney")
splice的四个参数:
splice(目标数组,操作元素的起始位置,操作元素长度,替换列表)
@array = qw(pebbles bino fred barney betty); #不删除的插入元素:把第三个参数设为0
@removed = splice @array,1,0,qw(wilma); # 什么元素都不删除
# @removed = qw()
# @array 变为 qw(pebbles wilma dino
# fred barney betty)
注意:数组的索引表达式都会被当做普通字符串表达式来处理。
@fred = qw(eating rock is wrong);
$fred = "right"; #我们想说的是"this is right[3]"
print "this is $fred[3]\n"; #用到了$fred[3],打印"wrong"
print "thid is ${fred}[3]\n"; #正确打印(使用花括号避免歧义)
print "thid is $fred"."[3]"\n"; #正确打印(使用分开的字符串避免歧义)
print "this is $fred\[3]\n"; #正确打印(使用反斜杠避免歧义)
通过foreach遍历列表中的值。
@fred = qw(eating rock is wrong);
foreach $rock(@fred){
print $rock."\n";
};
#输出:
eating
rock
is
wrong
@fred = qw(eating rock is wrong);
foreach (@fred){
print $_."\n";
}
这段代码与上面的输出是一样的,如果没有告诉Perl使用哪个变量,都会自动使用 $_。
reverse操作符会读取列表的值,然后以相反的次序返回这个列表。
@fred = 6..10;
@barney = reverse(@fred); #得10,9,8,7,6
sort操作符会读取列表的值,并且根据内部的字符编码顺序对其排序。
每次对数组调用each都会返回数组下一个元素所对应的索引和该元素的值。
@fred = qw(eating rock is wrong);
while(($index,$value) = each @fred){
print "$index:$value\n";
}