第三章?列表和数组
1.?列表是标量的有序集,数组是包含列表的变量,严格讲列表是指数据,数组是其变量名。
?数组的索引从0开始,依次递增。
?列表和数组可以包含任意数量的元素。最少含有0 元素,最多可以填满你的可用内存。
?当然,下标可以是任何能返回数值的表达式。如果其值不为整数,则自动将其转换为小于它的最大整数?
值:
?$number = 2.71828;
?print $fred[$number-1]; #和print $fred[1]一样
?如果下标超出了数组的范围,则其值为undef。这和通常的变量情况是一样的,如果没有值存放在变量中?
,则其为undef。
?$blank = $fred [142_857] #此数组元素未存放值,得到undef
?$blanc = $mel; #$mel 未存放值(未初始化),得到undef
?数组自动增长:
?#!/usr/bin/perl -w
?@array = qw(info www);
?$array[5] = "org";
?## 则数组个数6,最大的下标值$#array
?
?初始化数组:@test = 1..10;
?@test = (1..10);
?@test = qw(1 2 3 4 5);
2.列表
?数组是由括号括起来并且其元素由逗号分隔开的列表。
?(1,2,3)
?()
?(1..100)
?(5..1) 注意左值必须小于右边的值,否则为空。
?($m..$n)也可以是表达式。
?(“fred”,“barney”,“betty”,“wilma”,“dino”)
3.qw 简写
?字符串列表qw(fred dino)
?Perl 将它们当作单引号字符串处理,你不能像双引号那样在qw 中使用n 和$fred。whitespace(空格,?
?像spaces,tabs,newlines 等字符串)将被忽略,剩下的组成了列表的元素。
?
?print qw(1 2 3 4 5); # 输出12345,空格被忽略。
?print "qw(1 2 3 4 5)"; # 输出qw(1 2 3 4 5)
4.pop 和push(都是对数组的最右端操作)
?pop,取出数组的最右端的元素,并返回该值。如果数组是空的,则pop什么也不做
???? 直接返回undef.
?@array = 5..9;
?$fred = pop(@array);
?$fred = pop @array;
?pop @array;
?push添加一个或一串元素到数组的最右端。
?push(@array,0);
?push @array,8;
?push @array,8,9;
?push @array,1..5;
?@num = qw/1 2 3 4 5/;
?push @array,@num;
?对列表直接量进行pop或push是不可能的。
?shif和unshift
?对于数组的最左端操作。
?shift操作空数组时返回undef
?用法可参照pop和push
5. 数组插入字符串:
?数组也可以插入双引号的字符串中。插入的数组元素会自动由空格分开。
?分隔符是变量$"的值,默认值为空格(space)
?
?#!/usr/bin/perl -w
?@fred = qw /a b c d e f g/ ;
?print @fred ; ## 列表上下文
?print "@fred? n"; # 输出结果:abcdefga b c d e f g
?
?插入的数组元素的第一个元素前面和最后一个元素后面不会插入空格,如果需要可以自己加.
6.foreach
?遍历数组,控制变量$rock就是数组中元素的值,也就是循环时如果修改了控制变量的值就等于修改了
?数组中元素的值,控制变量是循环过程的私有变量。默认用$_
?@rocks = qw/bedrock slate lava/;
?foreach $rock (@rocks) {
??$rock = "t$rock";
??$rock .= "n";
??print "$rock";
?}
?print "$rock-@rocksn";
?$_ = "test"; ?print; ?## 输出$_的值test.