1-列表list指的是标题的有序集合, 而数组(array)则是存储列表的变量。
更精确地说,列表指的是数据,而数组指的是变量。
访问数组中的元素
$fred[0] = "yabba"; $fred[1] = "dabba"; $fred[2] = "doo"; $number = 2.71111; print $fred[$number-1]; #dabba 如果下标不是整数,会舍去小数。 print $fred[145] #如果不存在下标则返回 undef
特殊数组索引, 获得最后一个元素
$rocks[0] = "one"; $rock[99] = 'last'; print $rock[$#rock] ; #last print $rock[-1]; #last
列表直接量
(1,2,3) (1,2,3,) ("friend",11) () (1..100) (1.7..5.7) (5..1)空列表 (0,2..6,10,12) ("fred", "barrbey"m "wilma")
qw简写
qw(fred barrbey wilma)
qw允许使用任何标点符号作为定界符。
qw/ fred barney betty / #可以用反斜杠转义定义符
列表的赋值
($fred, $barney, $dino) = ('a', 'b','c'); print $barney; #结果为b ($a,$b)=($b,$a); #a,b两个变量值交换
数组变量赋值及简写
($rocks[0], $rocks[1], $rocks[2]) = qw/a b c/; @rocks = qw/a b c/; #上面方法的简写
数组操作
@a =qw/a b/; @b =(@a, "c", 'd'); #a,b,c,d
pop与push操作, 操作的是最右端
@array = 5..8; $array1 = pop(@array); #会从array中移除最后一元素元素8,返回8 push @array, 100; #向后加100
shift和unshift操作符, 操作的是最左端
@array = qw# a b c d #; $m = shift(@array); #@array值为(b,c,d) unshift(@array, 100); #向前加入100即(100,b,c,d)
splice操作符, 一共4个参数,2个可选参数, 次序为(目录@array,起如位置,元素的长度,要插入的@array)
@array = qw( a b c d); @removed = splice @array, 2; print @removed; #qw(c,d) print @array;#qw(a,b)
插入一个元素
@array = qw( a b c d); @removed = splice @array, 2, 0 ,qw(g); print @array;#qw(a,b,g,c,d) 删除0个,然后在2个位置插入g,
foreach使用, 如何在foreach中使用,不会改变foreach那个对象的值
foreach $rock (qw/a b c d/){ print "$rock " }
最喜欢用的默认变量 $_ , 下面例子会打印从1到100的数值
foreach (1..100){ print "$_ " }
reverse操作符, 反序
@newone = reverse 6..10; #不会影响原来的数组
sort操作符,后面再讲自定义排序,,默认根据ascii码大小排序
@numbers = sort 97..102; # 100 101 102 97 98 99
each操作, 遍历会带索引
use 5.0.12; my @rocks = qw/a b c d/; while (my($index, $value) = each @rocks){ print "$index:$value,"; #0:a,1:b,2:c,3:d, }
标题上下文与列表上下文(重点)
@people = qw(d a b c); @sorted = sort @people; #结果为 qw(a,b,c,d) $number = 42 + @people; #结果为46 #普通运算符 @list = @people; #得到4个人的列表 $n = @people; #得到人数3
标题表达式
$fred = something; #标题上下文 @pebbles = something; #列表上下文 ($wilma, $betty) = something; #列表上下文 ($dino) = something; #还是列表上下文 @fred= 6*7; #得到仅有单个元素的列表(42) @barney = "hello".' '."world"; #("hello world")
强制指定标量上下文
@rocks = qw(a b c d); print "num is ".scalar @rocks; #num is 4
列表上下文的STDIN
@lines = <STDIN>;
chomp(@lines); #去掉所有换行符