Perl里的列表和数组用于表示复数。列表是指有序集合,数组是存储列表的变量。数组和列表里每个元素都是独立互不相关的标量值。
-
在Perl中,数组的名字空间和标量的名字空间是完全分开的。
-
假如下标超出了,对应的值是undef。
-
如果对超过数组尾端的元素进行赋值,数组会自动扩大,增补元素默认为undef。只要有足够的内存的话,数组的长度是没有上限的。
-
数组最后一个元素的索引值是$#rocks。
列表直接量
列表是圆括号内包含一串由逗号隔开的数据。
(1,2,3..100) #1到100
qw简写
在Perl程序里,经常需要建立简单的单词列表,这时就需要使用qw简写,qw定界符也可以不同
qw(
fred
barney
betty
wilma
dino
)
列表的赋值
列表值也可以赋予给变量
(dino)= ("rubble",undef);
在赋值过程中。如果变量的个数不等于给定的列表值个数,那么多出来的值会被忽略。而如果变量的个数多于给定的列表值个数,那么多出来的变量会被设置为undef。
例子
($FRED) = qw<rubble slate>;
若想引用整个数组,可以在数组名前加上@字符,这表示全部的,所有的。
@rocks = qw/ bedrock slate lava /;
pop和push操作符
Perl中常把数组当作堆栈来使用。pop推出,push推入。
shift和unshift操作符
shift和unshift处理的是数组的首部,shift是取出,unshift是放入。
splice操作符
splice是针对数组中间元素进行操作的,返回被切出的片段。它有4个参数,后两个是可选的:要操作的目标数组,要操作的元素的开始位置,操作的元素长度(设为0就是插入列表),替换列表(不一定和取走的片段一样长)
@array = qw(pebbles dino fred barney );
@removed = splice @array,1,2,qw(wilma);
字符串中的数组内插
数组的内容同样是可以被内插到双引号中的。
@rocks = qw{ slate rubble};
print "quartz @rocks \n";
foreach控制结构
foreach $value (qw / bed slate /){
...
}
如果在foreach循环开头省略控制变量,那么Perl就会用它自己的默认变量$_。
foreach(1..10)
{
print" i can count $_";
}
reverse操作符
读取列表的值然后按照相反的次序返回该列表。
sort操作符
读取列表或者数组的值,然后进行排序。
如果要对数组进行排序,必须把排序后的结果存回数组
each操作符
对数组调用each,会返回数组中下一个元素所对应的索引和该元素的值。这是5.12版开始后的,在这之前each只能处理哈希键值对。
use 5.012;
@rock = qw/ bedrock slate /;
while( ($index,$value) = each @rock )
{
say "$index : $value";
}
标量上下文和列表上下文
当Perl在解析表达式时,我们要么希望它返回一个标量,要么希望它返回一个列表。
例如
@people = qw( fred barney betty);
@list = @people; #得到3个人的列表
$n = @people; #得到数字3
强制指定标量上下文用scalar
**<STDIN>在标量上下文中会返回输入数据的下一行,在列表上下文中会返回所有剩下的行,直到文件结尾 **
网友评论