Perl笔记:第02章、列表与数组
列表(list):列表指的是标量的有序集合。 列表指的是数据,而数组指的是变量。列表的值不一定放在数组里,但每个数组变量都一定包含一个列表(即使该列表可能是空的)。如下图是一个列表,无论他是否存储在某个数组中: 包含5个元素的列表 特殊的数组索引值如何确定数组最后一个索引号是多少 那么 $#rocks 的值为99 因为$rocks索引的最后一个索引确实为99,数组中元素的个数为$#rocks+1 。 列表直接量在圆括号中用逗号隔开的一系列值,这些值构成了列表中的元素。如下: 上面最后一个例子用到了范围操作符(..)。该操作符会冲左边的数字技术到右边,每次加1,以产生一连串的数字。举例来说: 正如最后两行所示,列表中的元素不必都是常量——他们也可以是表达式,每次用到这个表达式就会重新计算。 qw简写在perl程序中经常需要建立简单的单词列表。这时使用qw简写,就不必键入许多无用的引号: 当然qw还可以使用任意的符号作为列表的定界符,如下 最后四行所示,与前面的三个略有不同,如果起始定界符是偶中“左”字符,则结尾的定界符就是相应的“右”字符。如果是其他符号则前后定界符必须相同。 如果qw中需要有定界符的出现,可以使用反斜线转义一下,如下: 下面的例子是保护一连串unix文件名的列表: 列表的赋值($fred,$barney,$dino)=("a","b",undef); # 相当于做了3次独立的赋值操作 pop和push操作符pop操作符可以去除数组中最后一个元素,同时返回该元素值: 如果数组是空的,那么执行pop操作的话会返回undef 与pop对应的是push操作符 注意:push的第一个参数或pop的那个唯一的参数必须是数组变量 shift和unshift操作符pop和push都是针对数组的最后一个元素进行操作,那么shift和unshift则是针对数组的最前面的元素进行操作 @array=qw# dino fred barney #; 字符串中的数组内插和标量一样,数组也可以放在双引号包含的字符串中。如果将数组直接书写到双引号包含的字符串中时,会在数组的各个元素之间添加空格:
#!/usr/bin/perl -w</span></span>
use strict ; my @fruit = qw/apple banana orange pear/ ; print "my fruit :@fruitn" ; print "I like:$fruit[0]n" ; 输出结果: 注意: foreach控制结构foreach循环可以逐项遍历列表中的只,一次迭代(循环过程): 每次循环时,控制变量(control variable)(即此例中的$rock)都会从列表中取得新的值 控制变量并不是列表元素的复制品——实际上,他就是列表元素本身。也就是说,加入在循环中修改了控制变量的值,也就同时修改了这个列表元素。如下列子:
#!/usr/bin/perl -w
@rocks = qw/ bedrock slate lava / ; foreach $rock ( @rocks ) { $rock = "t$rock" ; $rock .= "n" ; } print "The rocks are:n" , @rocks ; 输出结果 注意:如果在foreach循环的靠头省略了控制变量的话,perl会使用默认的变量$_ 来取代。这个变量除了名称特别外语其他变量没有区别如下例子:
foreach
(
1
..10
)
{ print "I can count to $_!n" } 这种场合很多,如print,如果没有指定任何内容时他打印输出的为$_ 变量中的内容 reverse操作符reverse可以反转列表或数组的值,如下: reverse @fred; # 错误,不会修改 @fred sort操作符@rocks = qw/ bedrock slate rubble granite /; 最后一个例子可以看出,将数字当成字符串来排序,这样的结果不太对。根据默认的排序规则,任何以1开头的字符串会被排在9开头的字符串之前。另外,它和reverse一样不会修改参数,所以要对数组排序时,你必须将排序后的结果存回数组: sort @rocks; # 错误,这么做不会修改 @rocks @rocks = sort @rocks; # 现在手机来的石头拍的井井有条 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |