【Perl学习笔记】列表和数组
最近在弄WikiDump,发现Dump的解析工具都是Perl写的,没办法,只能开始啃Perl。下面是一些读书笔记,主要看的是小骆驼《Perl 语言入门》和《C程序员精通Perl》
---------------------------------------------------------------------------------------------------------
@ARGV数组
这是个由perl解释器事先建立的特殊数组,其内容就是调用参数所组成的列表。它和其他列表没有不同,只是在程序开始运行时里面就已经塞满了调用参数的列表。
访问数组中元素
建立数组如下:
$rocks[0] = "yabba";
$rocks[1] = "dabba";
$rocks[2] = "doo";
使用下标取值:
print $rocks[0];
神奇的地方是:如果你用了非整数作为下标,Perl会给你自动的舍去小数点。如下例中结果就是和fred[1]一样。
$number = 2.71828;
print $fred[$number-1];
如果索引超出数组的尾端,则相应的值将会是undef。这点和一般的标量相同,如果从来没有对标量变量进行过赋值,它的值就是undef。
最后一个元素的索引:
$end = $#rocks;
$number_of_rocks = $end +1;
列表直接量
(1,2,3) #包含1、2、3三个数字的列表
(0,2..6,10) #相当于(0,2,3,4,5,6,10)
(5..1) #空列表:..只会“向上”计数
qw简写
qw是“加上引号的单词”或“把空白当成引号”的简写,qw由界定符框定,界定符可以是任何一种。如:
qw! fred barney betty wilma dino !
qw[ fred barney betty wilma dino ]
Shift 和 unshift 操作
shift和unshift操作的是数组的“开头”。
@array = qw # dino fred barney #
$x = shift(@array); # $x 变成“dino”, @array现在是(“fred”, “barney”)
$y = shift @array; # $y 变成“fred”, @array现在是(“barney”)
shift @array; # @array为空
$z= shift @array; # $z变成undef
unshift(@array, 5); #@array现在是包含一个元素的列表(5)
@others = 1..3;
unshift @array, @others; # @array现在是(1,2,3,5)
pop 和 push 操作
与shift和unshift相反,pop 和 push 操作的是数组的“结尾”。
@array 5..9;
$fred = pop(@array); # $fred变成9,@array为(5,6,7,8)
$barney = pop @array; # $barney变成8,@array为(5,6,7)
pop @array #@array(5,6)
push(@array,0) # @array(5,6,0)
push @array, 1..2; # @array(5,6,0,1,2)