第三章 列表和数组
列表和数组用于表示复数(标量表示单数) 列表指的是标量的有序集合,数组是存储列表的变量;列表指的是数据,数组指的是变量; 列表和数组中的每个元素都和互不相关的标量变量,可以使数字、字符串、undef值或不同类型标量值的混合 数组和列表可以包含任意多的元素 数组 $fred[0]="aa"; $fred[1].="bb"; print $fred[3]; 如果下标超出数组的尾端则对应的值为undef 数组会根据需要自动扩大 最后一个元素的索引值为$#数组名 列表 (1,2,3,100..200,"fred",$n..$m,$x+$y) #..表示到 列表的赋值 ($a,$b,$c)=("aa","bb","cc"); ($a,$b)=($b,$a); #交换变量的值 ($a,$c)=qw( aa bb cc ); @数组名1=(@数组名2,'aa',$n,..); #@数组名表示引用整个数组 @copy=@quarry; ?#将一个数组的列表复制到另一个数组,注意仍然是列表的赋值运算 qw简写 省去引号 格式:qw 定界符 内容 定界符 qw( a b cda );qw{ a b cba };qw! a b cba !; ? #如果定界符有对应的"右"形式则要以右形式结束 pop和push操作 把数组当做堆栈使用,对数组最右边进行处理 $x=pop(@array); pop @array; ? #相当于丢弃数组array的最后一个元素,可以不要() push(@array,0); push @array,@others; #把数组others的全部元素值压入array push @array,1..10; shift和unshift shift相当于pop,unshift相当于push,只不过是对数组最左边进行处理 $m=shift(@array); #把数组array最左边的元素弹出来给变量m @others=1..3; @array=(4,5); unshift @array,@othters; #@array为(1,4,5) splice操作符 对数组中的元素实现操作,删除,添加等 第一个参数为被操作数组,第二个参数为操作的起始位置(只有前两个参数则从起始位置到最后),第三个参数为操作元素的个数,第四个参数为插入的参数 @array=qw( a b c d ); @removed=splice @array,2; ?#@removed为qw( c d ),@array为qw( a b ) @removed=splice @array,1,2; ?#@removed为qw( b c ),@array为qw( a d ) @insert=qw( i ); @removed=splice @array,@insert; ?#@removed为qw( b c ),@array为qw( a i d ) splice @array,@insert; ?#@array为qw( a i b c d ) 字符串中的数组内插 @insert=qw( b c ); print "there are a @insert d en" ?#打印there are a b c d e,元素之间会被默认加上空格 如果不要内插,要@(比如写email地址的时候) foreach控制结构 逐项遍历列表中的值 perl会自动存储foreach循环的控制变量并在循环结束后还原,所以不必担心之前是否用过同名变量 $x=k; @array=qw( a b c ); foreach $k (@array) {print $k;} ?#打印abc print $k; ?#打印k foreach ?(1..10) {print $_;} ?#打印1到10,$_为默认变量,除此之外和别的变量无区别 print; ?#打印$_ reserve操作符 读取列表的值,并且按照相反的次序返回,但是不会修改传进来的参数 @array=qw(1..10); @fred=reserve(@array); #@fred为10到1,@array仍然为1到10,可以去掉括号 sort操作符 读取列表的值,根据内部的字符编码顺序进行排序 @sorted=sort @array; @sorted=reserve sort @array; each操作 每次调用each返回数组下一个元素的索引和值 my @array=qw( a b c ) my( $index,$value )=each @array; 上下文 同一个表达式出现在不同地方意义不同 @array=pw( a b c ); @array2=sort @array; ?#列表上下文,c b a $num=1+@array; ?#标量上下文,$num为4 scalar告诉perl把列表上下文切换到标志上下文 @array=pw( a b c ); print @array; ?#打印a b c print scalar @array ?#打印3,因为array中有3个元素 <STDIN>中unix或类似系统用control+D告诉系统不会有任何输出,而DOS/Windows中用control+Z 比如输入三行数据,得到的数组包含三个元素,每个元素以换行符号结尾,去除: chomp($lines=<STDIN>); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |