列表与数组
区别:列表指的是数据,而数组指的是变量。列表的值不一定要放在数组里,但每个数组变量都一定包含一个列表。
我的理解是:列表应该是单维数组;而数组则可以是单维,也可以是多维。列表里存的只能是标量,而数组则可以写成包含数组、列表、标量等。
数组:
1、通过下标数字来引用数组元素:$fred[0]="ppp"
2、对索引值超过数组尾端的元素进行赋值,数组将会根据需要自动扩大,在扩展中需要创建增补?? 元素的默认值为undef。
?? $rocks[0]="ccc"
?? ...
?? $rocks[3]="ppp"
?? $rocks[99]="sss"?? #现在有95个undef元素
3、最后一个元素的索引值:$#rocks
?? $rock[$#rock] ="lll"
4、负数数组索引值
?? eg:在数组中有3个元素,则-1:最后一个元素 -2:中间的元素? -3:第一个元素
?? $rock[-1] ="lll"
列表:
1、列表直接量
1)可以写成数组的样子
? (1,2,3,)---逗号会被忽略
? (“fred”,4.5)---两个元素 “fred”和4.5
? (1..100)---100个整数构成的列表;
<..范围操作符,从左边的数字计数到右边,每次加1,以产生一连串的数字>
? (5..1)#空列表:..仅向上计数
?? ("qqq","www","eee","rrr","ttt")
qw简写:
?? qw(qqq www eee rrr ttt)
qw的功能:加上引号的单词,perl会将其当成单引号内的字符串来处理,所以不能像双引号内的字符串一样使用n或$fred.
定界符:上面的例子都是以一对圆括号作为定界符,perl允许使用任何符号作为定界符。
qw !qqq www eee rrr ttt !
2、列表的赋值
1)直接赋值
($fred,$barney,$dino)=("qqq",undef);
?多出来的值会被忽略掉
?变量个数多过给定的列表值,多出来的变量将设成undef
2)互换两个变量的值
? ($fred,$barney)=($barney,$fred)
========================================
($fred,$barney)=("ccc","ddd");
($fred,$barney)=($barney,$fred);
print "$fred=$fredn";
print "$barney=$barney";
结果:
E:perl>perl p.pl
$fred=ddd
$barney=ccc
=========================================
3)引用整个数组--@
@rocks= qw(qqq www eee rrr);
$dino = "granite";
@quarry = (@rocks,"crushed",$dino);
则@querry拥有了6个元素的列表。
=============================
@rocks= qw(qqq www eee rrr);
$dino = "granite";
@quarry = (@rocks,$dino);
print "@quarry";
结果:
E:perl>perl p.pl
qqq www eee rrr crushed granite
============================
4)数组的复制
@quarry = @rocks;#将一个数组中的列表复制到另一个数组中。
3、pop和push操作符?
pop操作符:
功能:取出数组中最后一个元素
返回值:该最后一个元素值,如果数组为空,返回undef
push操作符:
功能:添加一个元素到数字的尾端
push(@array,@others)
push和pop的第一个参数 都必须是需要操作的那个数组。
4、shift和unshift操作
shift操作符:
功能:取出数组开头的第一个元素
$m=shift(@array);
unshift(@array,5)
5、字符串中的数组内插
1)内插时,会在数组的各个元素之间自动添加分隔用的空格
2)首尾不会增添额外空格
@rocks= qw(qqq www eee rrr);
#$dino = "granite";
#@quarry = (@rocks,$dino);
print "kkk @{rocks}lll";
E:perl>perl p.pl
kkk qqq www eee rrrlll
E:perl>
6、foreach控制结构
控制变量不是列表元素的复制品,它就是列表元素本身;
================================
@y= qw(qqq www eee rrr);
foreach $rock(@y) {
?? $rock ="t$rock";
?? $rock.="n";
}
print "the rocks are:n",@y;
结果:
perl p.pl
the rocks are:
?qqq
?www
?eee
?rrr
E:perl>
================================
7、reverse操作符
功能:读取列表(数组)的值,并按相反的次序返回该列表。
返回值:返回次序相反的列表,不会修改传进来的参数。
===============================
@fred =(0..9);
$_=reverse(@fred);
print;
结果:
E:perl>perl p.pl
9876543210
================================
8、sort操作符 功能:根据内部的字符编码的顺序,对它们进行排序 返回值:返回排序后列表,不会修改传进来的参数。 注意:该函数将数字当成字符串来排序 ascii排序: 1)大写字符排在小写字符前面 2)数字排在字母前面 3)标点符号散落在各处