《Perl语言入门》之二――列表与数组
列表指的是标量的有序集合,而数组则是存储列表的变量;精确的说,列表指的是数据,数组指的是变量。 $fred[0] = "yabba"; $fred[1] = "abba"; $fred[2] = "doo"; 数组的名字空间和变量的名字空间是完全分开的,因此可以在同一个程序里再取一个名为$fred的变量而不会冲突。 特殊的数组索引 列表直接量 (1,2,3) #包含1、2、3这三个数字的列表 (1..100) #100个整数构成的列表 注意,范围操作符".."会从左边的数字计数到右边,每次加1;但是范围操作符只能向上计数,如果需要一个倒序的列表,可以使用reverse 操作符。 在Perl程序里,经常需要建立简单的单词列表,这时只需要使用qw简写,就可以省去键入无谓引号的麻烦,例如: qw( fred barney betty wilma dino ) 或者 qw# #看起来像注释,不过这里用作定界符,此外还可以用!、/、[]、{}等任何标点符号作为定界符 fred #可以使每个元素独立成行,便于阅读和修改 barney betty wilma dino # 常用的数组操作符 @array = 5..9; $fred = pop @array #$fred变成9,@array变成(5,6,7,8) push @array,9 #@array变成(5..9) shift和unshift操作符同上面的完全相反,处理数组开头的部分,例如 @array = qw # dino fred barney #; $m = shift(@array); # $m变成"dino",@array变成("fred","barney") $n = unshift(@array,"betty"); # @array变成("betty","fred","barney") splice操作符用于操作数组中间的的某些元素,它可以接受至少两个,最多四个参数,例如: @array = qw( pebbles dino fred barney betty ) @removed = splice @array,3 # 删掉元素barney及其以后元素,@removed变成qw ( barney betty ) @array = qw( pebbles dino fred barney betty ) @removed = splice @array,1,2 # 从索引1开始,删掉2个元素,@array变成qw( pebbles barney betty ),@removed变成qw( dino fred ) @array = qw( pebbles dino fred barney betty ) @removed = splice @array,qw( wilma ) # @array变成qw( pebbles wilma barney betty ),@removed变成qw( dino fred ) reverse操作符 @fred = 6..10; @barney = reverse @fred; # 得 10,9,8,6 必须注意,reverse不会修改传进来的参数,只会返回次序相反的列表。 @fred = 8..12; @rocks = sorts @fred # 得到10,11,12,9 each操作符 use 5.012; my @rocks = qw / bedrock slate rubble granite /; while (my($index,$value) = each @rocks) { say "$index: $value"; } foreach控制结构 @people = qw (fred barney betty) @sorted = sort @people # 列表上下文:barney,betty,fred $number = 42 + @people # 标量上下文:42 + 3 = 45 当然,并不是一定会在标量上下文中得到列表的个数。比如sort在标量上下文中会返回undef。(实际上没人需要统计列表排序后的元素个数) @backwords = reverse qw/ yabba dabba doo /; #会得到 doo,dabba,yabba $backwords = reverse qw/ yabba dabba doo /; #会得到oodabbadabbay 相对于上面的用法,在列表上下文中使用产生标量的表达式就简单很多了:如果表达式求值结果为标量值,则自动产生一个仅含此标量值的列表。 @fred = 6 * 7; # 得到仅有一个元素的列表(42) 强制指定标量的上下文 @rocks = qw( talc quartz jade obsidian ); print "I have",scalar @rocks,"rocks!n"; #打印出的是石头的种数 列表上下文中的<STDIN>在标量上下文中,<STDIN>会返回输入数据的下一行;在列表上下文中,会返回所有剩下的行,直到文件结束为止,返回的每一行都会成为列表中的元素。当输入数据来自某个文件时,列表上下文会读取文件的剩余部分。如果是键盘输入:Unix或类似系统可以键入"Control+D"来告知系统不会有任何输入了;对于Windows来说,需要使用"Control+Z"。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |